Git: игнорировать некоторые файлы во время слияния (сохранить некоторые файлы, ограниченные одной ветвью)

У меня две ветки, A и B. В ветке A есть каталог examples с некоторыми файлами, которые отслеживаются git, и эти файлы должны не отображаться в ветке B. В моем рабочем процессе часто меняются изменения, сделанные в A в B, что является проблемой при каждом изменении на examples. На данный момент я делаю это вручную: стирание файлов после слияния или разрешение конфликтов при изменении файла, который я уже удалил.

Можно ли игнорировать эти файлы во время слияния? (Или можно сохранить некоторые файлы, ограниченные одной ветвью (A) или от одной ветки (B)?)


Позвольте мне объяснить, почему я это делаю: A - скелет блога (шаблон, скрипты и т.д.), B - это мой блог (A, заполненный моими собственными сообщениями, изображениями, черновиками и т.д.). A является общедоступным, и я пытаюсь сделать его общим для других, чтобы посмотреть и использовать его, но из-за этого мне нужны некоторые сообщения там как showcase/tests (каталог examples). Каждое изменение в A и позднее объединяется в B, чтобы это изменилось в моем экземпляре блога. Таким образом, все новые примеры появляются в B и все удаленные примеры в B, которые были изменены в A поскольку последнее слияние приводит к конфликту.

Ответ 1

Я нашел здесь хороший ответ: fooobar.com/questions/8407/...

В нем используются идеи, взятые здесь: Pro- Git стратегии объединения

Вот его копия:

Предположим, вы хотите исключить файл config.php

На ветке A:

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

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

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

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


Edit:
Из git book относительно merge=ours, "Один очень полезный вариант - сообщить git не пытаться объединить определенные файлы когда они конфликтуют, а скорее используют вашу сторону слияния над кем-то elses."

Итак, этот ответ не применим, как и к вопросу. pjmorse answer относительно использования подмодулей - это хорошо.

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

Ответ 2

Возможно, вы найдете команду git rerere. С этим вы можете записывать разрешения для определенных конфликтов слияния и повторно использовать их позже.

Ответ 3

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

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

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