Git: игнорировать некоторые файлы во время слияния (некоторые файлы должны быть ограничены одной веткой) - PullRequest
52 голосов
/ 06 октября 2010

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

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


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

Ответы [ 3 ]

54 голосов
/ 04 ноября 2011

Я нашел хороший ответ здесь: stackoverflow Q332528

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

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

Допустим, вы хотите исключить файл config.php

На ветке A:

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

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

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

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


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

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

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

3 голосов
/ 06 октября 2010

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

1 голос
/ 07 октября 2010

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

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

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

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