Git: игнорировать некоторые файлы во время слияния (некоторые файлы должны быть ограничены одной веткой)
У меня есть две ветви, A
а также B
, Ветка A
есть каталог examples
с некоторыми файлами, которые отслеживаются git, и эти файлы не должны появляться в ветке B
, В моем рабочем процессе я делаю изменения, сделанные в A
в B
часто, что является проблемой каждый раз, когда происходят некоторые изменения examples
, На данный момент я делаю это вручную: стираю файлы после слияния или разрешаю конфликты, когда произошли изменения в уже удаленном файле.
Можно ли игнорировать эти файлы во время слияния? (Или можно ограничить некоторые файлы одной веткой (A
) или далеко от одной ветви (B
)?)
Позвольте мне попытаться объяснить, почему я делаю это:A
скелет блога (шаблон, скрипты и т. д.), B
мой блог (A
заполнены моими собственными постами, изображениями, черновиками и т. д.). A
является общедоступным, и я пытаюсь сделать его общим, чтобы другие смотрели и использовали его, но из-за этого мне нужны некоторые посты там как витрина / тесты (examples
каталог). Каждое изменение в A
и позже слит в B
чтобы эти изменения были в моем блоге - таким образом все новые примеры появляются в B
и все удаленные примеры в B
которые были изменены в A
с момента последнего слияния возникает конфликт.
3 ответа
Я нашел хороший ответ здесь: stackru Q332528
Он использует идеи, взятые отсюда: стратегии слияния Pro-Git
Вот копия этого:
Допустим, вы хотите исключить файл
config.php
На ветке А:
Создайте файл с именем ".gitattributes" в том же каталоге, с этой строкой: config.php merge = ours. Это говорит git, какую стратегию использовать, когда mergin файл. При этом всегда сохраняйте свою версию, т.е. версия ветки, в которую вы сливаетесь.
Добавьте файл.gitattributes и зафиксируйте
На ветке B: повторите шаги 1-2
Попробуйте объединить сейчас. Ваш файл должен быть оставлен нетронутым.
Редактировать:
Из Git Book относительно merge=ours
"Один очень полезный вариант - сказать Git не пытаться объединять определенные файлы, когда у них есть конфликты, а использовать вашу сторону объединения поверх чужой".
Таким образом, этот ответ не относится так же, как он мог бы к вопросу. Ответ pjmorse относительно использования подмодулей хороший.
Другой вариант - использовать объединение поддеревьев, что может иметь дополнительные преимущества.
Вы можете найти Git's rerere
Команда полезна. При этом вы можете записывать разрешения для определенных конфликтов слияния и использовать их позже.
С вашими обновлениями: Да, подмодули будут подходящими для этого использования, если все A помещаются в подкаталог B (или наоборот). Примером подмодулей, использующих WordPress, может быть, если у вас есть git-репозиторий Wordpress; Вы можете добавить субмодуль для темы, которая будет внутри /wp-content/themes/
каталог.
Документация для подмодулей может помочь.
Если файлы из этих двух чередуются, это может быть более жестким. В большинстве случаев, когда субмодули могут использоваться таким образом, рассматриваемое приложение было разработано, чтобы учесть их.