Поддержание 3 удаленных репозиториев в одной локальной папке

Я использую Tortoise GIT. Можно ли поддерживать 2 удаленных репозитория в одной локальной папке? У меня есть главный удаленный репозиторий, а затем есть промежуточный удаленный репозиторий, который всегда намного опережает главный репозиторий. Я создал локальное репо и вытащил из главного удаленного репо. Затем я создал новую ветку и попытался извлечь из удаленного промежуточного репозитория, и это дает мне более 1000 конфликтов и более 3000 измененных файлов. Как мне справиться с этим, используя GIT черепахи?


person papfan    schedule 28.07.2012    source источник
comment
Чего именно вы хотите добиться? Мне кажется, вы смешиваете значения репозиториев и веток.   -  person iltempo    schedule 28.07.2012
comment
я хочу иметь одну папку на моем локальном компьютере, которую можно использовать для хранения всех трех удаленных репозиториев в GITHUB. Но я не могу этого сделать по причинам, указанным в основной ветке.   -  person papfan    schedule 28.07.2012
comment
Но являются ли удаленные репозитории ответвлениями или ветвями одного репозитория? Есть ли у них общая история или это несвязанные наборы файлов с похожими именами и похожим кодом?   -  person Jonathan Wakely    schedule 29.07.2012
comment
Я думаю, что это очень странный способ организовать вещи...   -  person chwi    schedule 30.07.2012


Ответы (1)


Ваша проблема — это просто непонимание git pull. Предположим, два ваших пульта называются origin и staging, а ветка, в которой вы работаете, называется master.

Сейчас у вас master настроено отслеживание удаленного origin. Это нормально. Но теперь вы выдаете:

git pull staging master

Что делает git pull? Он извлекает указанную ветку в FETCH_HEAD в каталоге .git, а затем объединяет ее с вашей текущей веткой. Это все, что он делает — выборка с последующим слиянием в ветке отслеживания по умолчанию (если команда не указана) или в указанной ветке (если она указана).

Вы берете версию master из промежуточного репозитория и объединяете ее с копией master из вашего репозитория origin. Как вы заметили, репозиторий staging «намного опережает» репозиторий origin. Отсюда конфликты слияния.

Вы не делаете ничего плохого. На самом деле отслеживание нескольких репозиториев в одной локальной копии — стандартная операция в git (на работе я отслеживаю 12).

Вместо этого попробуйте это (опять же, предположим, что одно репо — staging, другое — origin, и оба используют ветку master):

git checkout -b development --track staging/master

Это приведет к локальному извлечению ветки под названием «разработка», которая будет настроена для отслеживания основной ветки вашего промежуточного репозитория. Теперь вы можете выпускать git pull в этой ветке столько раз, сколько хотите, зная, что она не будет пытаться объединить производственную ветку master в себя, если только вы явно не скажете ей об этом.

person Christopher    schedule 30.07.2012