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

На ветке А:

  1. Создайте файл с именем ".gitattributes" в том же каталоге, с этой строкой: config.php merge = ours. Это говорит git, какую стратегию использовать, когда mergin файл. При этом всегда сохраняйте свою версию, т.е. версия ветки, в которую вы сливаетесь.

  2. Добавьте файл.gitattributes и зафиксируйте

На ветке B: повторите шаги 1-2

Попробуйте объединить сейчас. Ваш файл должен быть оставлен нетронутым.


Редактировать:
Из Git Book относительно merge=ours"Один очень полезный вариант - сказать Git не пытаться объединять определенные файлы, когда у них есть конфликты, а использовать вашу сторону объединения поверх чужой".

Таким образом, этот ответ не относится так же, как он мог бы к вопросу. Ответ pjmorse относительно использования подмодулей хороший.

Другой вариант - использовать объединение поддеревьев, что может иметь дополнительные преимущества.

Вы можете найти Git's rerere Команда полезна. При этом вы можете записывать разрешения для определенных конфликтов слияния и использовать их позже.

С вашими обновлениями: Да, подмодули будут подходящими для этого использования, если все A помещаются в подкаталог B (или наоборот). Примером подмодулей, использующих WordPress, может быть, если у вас есть git-репозиторий Wordpress; Вы можете добавить субмодуль для темы, которая будет внутри /wp-content/themes/ каталог.

Документация для подмодулей может помочь.

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

Другие вопросы по тегам