Пользовательский git diff для игнорирования некоторых конфликтов

Я начинаю тесты, чтобы перейти от cvs к git, и у меня проблемы со всеми моими тестами.

Мы поддерживаем индивидуальную копию исходников FreeBSD, поэтому в cvs мы делаем следующее при выпуске новой версии FreeBSD:

  1. Импортировать новый freebsd src как ветку поставщика
  2. Объединить изменения в HEAD

Я попытался сделать то же самое с git, и это сработало, но почти все файлы FreeBSD имеют собственный идентификатор, например:

$FreeBSD: release/7.0.0/COPYRIGHT 175036 2008-01-01 09:36:30Z imp $

Эти строки всегда меняются, и из-за того, что они хранятся в репозитории svn (release / 7.0.0, 7.1.0, 7.2.0), git генерирует множество конфликтов, которые необходимо исправить вручную.

Я хотел бы знать, есть ли способ настроить git, чтобы просто игнорировать различия в этих строках и использовать новый без запроса.

Я могу сделать это с помощью команды diff, игнорируя эти строки, например:

diff -q -I'[$]FreeBSD:.*$'

Заранее спасибо.


person Renato Aquino    schedule 26.05.2009    source источник
comment
Спасибо за принятый ответ, но вы придумали сценарий, делающий то, что вы хотели? Если да, вы можете написать здесь, чтобы остальные из нас могли использовать;)   -  person VonC    schedule 28.05.2009
comment
Я собираюсь протестировать это и оставить комментарий.   -  person Renato Aquino    schedule 28.05.2009


Ответы (1)


Я не уверен, что вы можете избежать конфликта во время слияния из-за этих изменений.

Что вы можете сделать, так это небольшой скрипт, способный перечислить все файлы для слияния, выполнить diff -q -I'[$]FreeBSD:.*$' для каждого из них, а для тех, у кого нет различий, сделать

git checkout --theirs theFreeBSDFile

тогда возобновление слияния сможет завершить конфликтующее слияние.

«git checkout --theirs» проверяют этап №3 (их) на наличие несвязанных путей.

На самом деле, git mergetool идеально подойдет для этой работы: непосредственно перед слиянием файлов FreeBSD установите ваша утилита mergetool для этого сценария, как описано в вопросе Может ли git-merge игнорировать различия в конце строки?.
Если вы настроили конфигурацию mergetool на доверие коду выхода этого скрипта, любой файл, который не отображает никаких отличия, кроме настраиваемых строк FreeBSD, будут 'git checkout --theirs' и, как сообщается, "объединены", остальные не будут объединены одним и тем же сценарием.
В конце, если в резюме по-прежнему отображается конфликтующий файл, сбросьте свой инструмент слияния на ваш любимый difftool , и разрешите оставшиеся конфликтующие файлы.

person VonC    schedule 26.05.2009