Возникли проблемы с локальным центральным хранилищем, извлечение и отправка изменений из другого локального хранилища

#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 (это база данных, метаданные и т.д.)… поэтому не ожидайте, что файлы, которые у вас есть в проекте, будут отображаться там и обновляться каждый раз, когда вы нажимаете.