#git
#git
Вопрос:
Я играюсь с Git, я создал текстовый файл с именем test.txt
и простой строкой в нем «Hello». Если мы можем представить, что несколько пользователей заходят на один компьютер, но каждый хочет отделиться от центрального репозитория, внесите изменения, а затем верните их обратно:
Users/Ari/MyCentralRepo/test.txt
Я захожу в MyCentralRepo
и инициализирую его как репозиторий и добавляю файл.
$ git init
$ git add .
$ git commit 'first commit'
Теперь, чтобы притвориться, что я другой пользователь, который также может получить доступ к вышеупомянутому каталогу, но я хочу клонировать проект, я бы сделал:
$ git clone Users/Ari/MyCentralRepo -- Users/JohnSmith/Dev_branch01
Это создает клон репозитория, над которым может работать Джон Смит, не влияя на MyCentralRepo
Джон Смит вносит некоторые изменения в test.txt
файл: «Привет, мир!» $ git status # показывает, что произошли изменения в test.txt Добавить $ git . $ git commit -m ‘Добавил больше текста’
Как Джон Смит отправляет изменения обратно пользователям / Ari / MyCentralRepo? Это как-то связано с git remote
Ответ №1:
Джону пришлось бы «запихивать» в репозиторий другого пользователя. При клонировании репозиторий, из которого вы клонировали, настраивается как удаленный с именем «origin»… итак, Джону пришлось бы сделать что-то вроде git push origin master
. Единственное, что, поскольку origin является «реальным» репозиторием (а не голым), git, вероятно, отклонит операцию отправки, если у исходного пользователя проверен мастер ветки (это совсем другой вопрос).). Джон мог бы попробовать что-то вроде git push origin master:john-branch
, и тогда вы получили бы вторую ветку на исходном удаленном компьютере.
Совет: Настройте центральное открытое репозиторий и позвольте пользователям взаимодействовать с ним.
Создайте третий репозиторий, который является пустым:
git init --bare some-location-on-your-fs/central
Затем перейдите к каждому разработчику и добавьте это репозиторий в качестве удаленного. Первый разработчик (Ari?) мог отправить master туда:
git remote add central-repo path-to-central-repo # done by both developers
git push central master # done by Ari
Заставьте Джона посмотреть, что находится в центральном:
git fetch central-repo
git push central-repo master # john is pushing his master branch into the central repo
Тогда Ari мог бы видеть эти изменения и работать оттуда
git fetch central-repo
git merge central-repo/master
Примечание: я не использую извлечение, чтобы вы могли видеть, что происходит шаг за шагом… извлечение может привести к ряду неправильных представлений, если вы точно не знаете, что оно делает.
Комментарии:
1. Ах, да, это проблема, с которой я сталкиваюсь в данный момент. Я пытаюсь
git push
иgit push origin master
, и я получаю некоторые ошибки, говорящие, что это невозможно. Каков наилучший способ сделать это? Центральное локальное хранилище, несколько пользователей, работающих над своей собственной версией и возвращающихся к центральному репозиторию локально?2. при использовании центрального репозитория с принудительным вводом , как вы пытаетесь, обычно центральное репозиторий является пустым репозиторием, так что там нет реального пользователя, сидящего там и работающего.
3. Тогда пользователи смогут отправлять. Возможно, вам следует создать новое хранилище? Позвольте мне добавить инструкции к моему ответу, чтобы вы могли продолжить оттуда,
4. Я нашел руководство, поэтому вместо того, чтобы использовать MyCentralRepo напрямую, я клонирую его в простое репозиторий, затем для каждого пользователя клонирую из простого репозитория. Но когда пользователь push изменяется, не обновляется исходный репозиторий или файлы MyCentralRepo? Нужно ли извлекать вручную?
5. У простого репозитория нет «рабочего дерева», единственное, что в нем содержится, — это репозиторий git (это база данных, метаданные и т.д.)… поэтому не ожидайте, что файлы, которые у вас есть в проекте, будут отображаться там и обновляться каждый раз, когда вы нажимаете.