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/
.
Документация для подмодулей может помочь.
Если файлы из двух чередуются, это может быть более жестким. В большинстве случаев, когда подмодули могут использоваться таким образом, рассматриваемая заявка была разработана для их разрешения.