2015-06-24 2 views
2

Предположим, что я являюсь частью команды разработчиков, и мы все работаем в разных отраслях от одного и того же проекта:Как применить исправление для нескольких ветвей?

 o--o--o--o (Bob) 
    /
o--o---o---o---o---o--o (Me, master) 
     \ 
     o--o--o---o (Alice) 

Сегодня я обнаружил ошибку в общем файле Алисы и Боба. Это старая ошибка.

Как исправить это в других ветках? Каков рабочий процесс в этой ситуации?

Я предполагаю, что правильный путь - это создать патч, который я лично пишу по электронной почте Алисе и Бобу: «Привет, Алиса и Боб, я обнаружил ошибку, появившуюся на commit 7a6b87f. ».

Решение кажется очень простым, если в проекте работает только три человека. Как мне управлять им в более крупном проекте с большим количеством филиалов и больше разработчиков?

Конечно, если я один на проекте, я могу просто использовать это solution.

+0

Обычный способ заключается в 'rebase' ветви на хозяина после каждой пары() изменения (ов). – choroba

+0

Если исправление находится на главном, почему другие пользователи не могут извлечь из мастера? –

ответ

2

Вы можете сделать то, что говорит Дэвид, но вместо слияния вы можете использовать команду cherry-pick. Другой вариант, использующий cherry-pick, - это просто вишня - выберите изменения, которые вы сделали на своей ветке, в другие ветви. Прежде чем делать это, вы должны быть уверены, что изменения в коммите принадлежат и только к исправлению ошибки. Затем вы просто переходите к каждой из других ветвей и git cherry-pick <commit hash>, если есть какие-либо конфликты, которые вам придется решить. Это правильный способ сделать это, я думаю, я делаю так и кажется более git-way.

Здесь документы: http://git-scm.com/docs/git-cherry-pick

0

Я бы создал ветку от общего предка Алисы и Боба, исправить там ошибку и затем объединить эту ветку в Алису, Боб и мастер. Таким образом, вы исправляете ошибку только один раз в одном коммите.

+0

Ну, мне все равно нужно проверить все ветки и выполнить слияние. Более того, мне нужно будет сообщить всем разработчикам об ошибке. – nowox

+0

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

1

Решение для почты использовалось до того, как git реализовал методы обмена протоколом git и ssh и может быть использован для отправки патчей людей для репозиториев, которые не подключены к Интернету. Самый простой способ применить исправления от почты - записать их в файл mbox и использовать git am. Но поскольку большинство людей даже не знают, что такое mbox-файл, этот метод используется не часто.

Установите флажок git help merge-base, чтобы найти точку, где можно отследить фиксацию фиксации.

Если вы действительно хотите исправить в одном коммите, вы можете просто написать, что совершить в любом месте и cherry-pick это для всех ветвей, если у вас есть доступ на запись к этим ветвям.

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

+0

Упрощение: «Поскольку большинство людей даже не знают, что такое файл mbox, этот метод используется не часто». - хорошее оправдание, и заставил меня рассмеяться ;-) –

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