2013-04-24 6 views
85

Я на окнах.При использовании патча можно ли разрешить конфликты?

По разным причинам у нас есть несколько экземпляров git разных ветвей svn.

Много раз я хочу исправить проблему в репозитории A, сгенерировать патч и применить его к репозиторию B. Это отлично работает, за исключением случаев конфликтов.

При перезагрузке я просто щелкаю правой кнопкой мыши по папке и использую tortioseGit и выбираю параметр разрешения. Это вызывает приятный gui, позволяющий мне работать через мои конфликты.

Есть ли способ сделать это с отклоненными патчами?

Вот мой текущий подход к созданию/применения патчей

git format-patch master --stdout > c:\\patch\\file.patch 
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch 
+3

Обычно я делаю это вручную, когда все параметры патчей терпят неудачу ... – stdcall

+0

Если слияние не удается, это происходит потому, что программа не может понять, как недвусмысленно выполнять слияние. Вы должны получить файл с <<<<, ===, > >>> наборами, и вам нужно войти и решить их вручную. – tacaswell

+0

Да, делать это вручную - это настоящая лаваш, когда вы говорите несколько 100 редж-чанков. – Kenoyer130

ответ

151

Чтобы создать свой патч выполните следующие действия:

git format-patch --stdout first_commit^..last_commit > changes.patch 

Теперь, когда вы будете готовы применить патчи:

git am -3 < changes.patch 

-3 сделает трехстороннее слияние, если есть конфликты. На этом этапе вы можете сделать git mergetool, если хотите перейти в gui или просто слить файлы с помощью vim (стандартное разрешение <<<<<<, ||||||, >>>>>>).

+0

Я не знал о ноте '...'; он задокументирован на странице руководства [gitrevisions (7)] (https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html). –

+0

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

+2

Может быть полезно добавить '--ignore-whitespace --ignore-space-change' в' git am' тоже. У меня было тривиальное слияние, которое не прошло без него. – angularsen

2

TortoiseGit имеет функцию объединения, которая может открыть файлы исправлений.

Есть фотография here.

+0

На самом деле опция слияния может быть тем, что я находясь в поиске. – Kenoyer130

+0

NM у него нет способа импортировать файл патча ... – Kenoyer130

+0

Действительно? Я не использовал черепаху в течение длительного времени, но на связанной странице есть текст: «TortoiseMerge может открывать файл исправления Git напрямую, вы просматриваете его и исправляете рабочую копию», так что кажется, что он должен! – ams

7

Если вы часто сталкиваетесь с тем же конфликтом, который задается при применении патчей, перезагрузке или слиянии, вы можете использовать функцию git rerere (повторное использование записанного разрешения). Это позволяет заранее определить, как конфликты должны быть разрешены на основе того, как вы их разрешили в прошлом. См. http://git-scm.com/blog/2010/03/08/rerere.html, чтобы узнать, как это работает.

0

Мой подход:

  • Создание «Интеграция» ветвп где файлы идентичны
  • Примените патч к этой интеграции-отделения
  • Merge или перебазировать его освоить (не знаете, если здесь полезно использовать rebase, потому что я не знаю, что произойдет при применении дальнейших патчей)
Смежные вопросы