2012-06-19 6 views
4

Прошу прощения, если это было ответино где-то полностью, очевидно и много раз, как это, вероятно, уже есть; но я не смог найти информацию об этой конкретной проблеме, которую я испытываю после поиска по крайней мере неделю.Git: Объединение нескольких филиалов

Чтобы упростить, у нас есть 3 человека, работающие над проектом, каждый человек имеет свою собственную ветку, которую мы регулярно собираемся объединить обратно в магистральный багажник. Проблема в том, что мы либо сталкиваемся с конфликтами (пытаясь выбрать cherry pick), либо просто переписываем все файлы мастера и первые 2 ветки, объединенные с последним, фактически ничего не объединяя, просто переписывая.

Моя проблема (надеюсь) просто:

Мастер ствол

string test1; 
string test2; 
string test3; 

test1 филиал

string test1 = "Dan Branch merged"; 
string test2; 
string test3; 

test2 филиал

string test1; 
string test2 = "Dave Branch merged"; 
string test3; 

test3 филиал

string test1; 
string test2; 
string test3 = "Will Branch merged"; 

Желаемая выход, когда все 3 ветви сливаются:

string test1 = "Dan Branch merged"; 
string test2 = "Dave Branch merged"; 
string test3 = "Will Branch merged"; 

Что я на самом деле получить, когда я пытаюсь объединить тест 1 и 2:

Автоматическое слияние не удалось; исправить конфликты и затем зафиксировать результат.

<<<<<<< HEAD 
+  String test1 = "Dan Branch merged"; 
+  String test2; 
+  String test3; 
    ======= 
+   String test1; 
+   String test2 = "Dave Branch merged."; 
+   String test3; 
    >>>>>>> test2 

настоящее время я использую Git-GUI на ОС Windows (с планом перехода на баш/оболочка/кли, когда я, наконец, получил мою голову вокруг мерзавца), так что если все это можно было бы замечательно если какие-либо ответы были даны специально для git-gui, но, конечно, нищие не могут быть выборами.

Попытка сохранить все просты, репозиторий находится в локальной сети, а не на любом сервере. Я не знаю, влияет ли это на реализацию (я бы предположил, что push и pull будут неиспользованы, если я правильно догадался об их использовании)

В настоящее время Git был отнесен к тому, чтобы быть методом хранения и просмотра старых версий поскольку все слияние осуществляется вручную.

+0

Вы черри-выбор, потому что 3 участника не будут сливать все свои поручения в мастер или это потому, что вы не знаете альтернативы этому? –

+0

@ ChristophEberhardt Я не знаю никаких альтернатив. Мы все работаем с регламентированными часами, в течение тех часов мы все получаем текущий главный багажник и работаем на разных его участках. Если мы попытаемся объединить все их обратно в магистральную магистраль один за другим, она, похоже, просто перезапишет объединенную ветвь с объединенной веткой. – Daemeous

+0

после слияния ветви с хозяином, выполняете ли вы после разрешения конфликтов? –

ответ

1

То, как вы обрабатываете свой код, возможно, не является обычным способом обработки распределенных разработок. Я бы рекомендовал (если доступ к основному стволу доступен во время разработки) следующие шаги, чтобы сделать эту работу:

git stash  (to put your changes away for the moment) 
git pull  (to get the latest commits) 
git stash pop (to get back, what was stashed away in the first step) 

Затем разрешить конфликт у вас есть. Это должно быть не так много, как при объединении целой ветви. Тогда:

git commit 
git push 

Важно: Избегайте изменения ветви и работать на хозяина. Филиалы чаще используются для параллельного развития вещей, которые не выполняются каждый день для освоения. Например. при запуске новой, основной версии программного обеспечения, которая изменяет большую часть старого кода или api, так что вы не можете просто нажимать их на master, потому что фиксация будет дезактивировать весь пакет.

Edit:

Чтобы honorate комментарий Давида: Это никакого вреда в использовании веток в мерзавца, но у меня был один или два случая, когда unproperly обрабатываемые ветви приводят к путанице, что неопытный пользователь мерзавец было трудное время для понимать и решать. Тем не менее, ошибка обработки не должна быть обычной.

Edit:

Как выясняется, у вас действительно есть только один локальный репозиторий ALLtogether. Мне показалось, что у вас есть репозиторий локальной сети, на который вы все нажимаете. Поэтому, если вы не измените свою инфраструктуру (я не рекомендую это. Альтернативой будет http://bitbucket.org и все с его собственным клоном хранилища на своем компьютере), тогда есть (я думаю) нет другого пути, когда у вас три ветви. Я настоятельно рекомендую вам, чтобы вы прочитали учебник git, например http://www.vogella.com/articles/Git/article.html, чтобы изменить вашу инфраструктуру. Удачи с ним.

+0

Филиалы дешево в Git. Какой вред в ветвлении, если все это снова сливается с капитаном? –

+0

@ ChristophEberhardt Спасибо за ваше время и помощь. Мы используем папку локальной сети, чтобы все было в порядке (я добавил, что через редакцию незадолго до вашего первого комментария, чтобы вы, вероятно, прочитали старую версию). Я предполагаю, что это так, если у вас есть настройка сервера. Если я прав, можете ли вы дать инструкцию о том, что является эффективной локальной настройкой? Еще раз спасибо. – Daemeous

+0

@Daemeous Могу ли я помочь вам любым другим способом? –

Смежные вопросы