Рабочий процесс git: Могу ли я предотвратить слияние определенного файла с другой веткой, но при этом держать его под контролем версий? - PullRequest
27 голосов
/ 23 декабря 2010

У меня есть хранилище с двумя ветками: live и stage.Хранилище содержит код для веб-приложения.Я хотел бы сохранить два разных файла .htaccess для рабочей и живой веток, но по-прежнему держать их под контролем версии, так как характер обслуживания рабочей площадки немного отличается (сейчас, например, я хочу, чтобы кэши были синхронизированыпо-разному).

Я новичок в git, так что, возможно, есть простое объяснение, но я хотел бы иметь рабочий процесс, где, когда я был вживую и вытащил изменения (просто git merge stage),Я не переписывал существующий .htaccess в ветке live.Есть ли способ настроить это?Я пропускаю какую-то большую концепцию в git?

Аналогично, есть также кусок (но, возможно, много) .html файлов, где я хотел бы отслеживать изменения, но не объединять их в живую.Просто чтобы прояснить, я хочу, чтобы вживую и сцена отслеживали изменения в этих файлах, но не должны объединять эти определенные изменения при выполнении слияний.

Ответы [ 2 ]

35 голосов
/ 23 декабря 2010

Я нашел ответ на другой вопрос о переполнении стека, кредит переходит к fcurella:

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

В ветви A:

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

  2. Добавьте файл .gitattributes и подтвердите

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

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

Это похоже на более масштабируемое решение.

7 голосов
/ 23 декабря 2010

Ankur, попробуйте это:

Предполагая, что вы извлечены в живой ветке, запустите:

git merge --no-commit --no-ff stage

Это объединит две ветви, но вместо того, чтобы сделать новый коммит, потерпит неудачу и оставит эти изменения в вашем индексном файле и рабочем каталоге.Теперь, так как вы хотите сохранить ваш файл .htaccess без изменений в ветке live, вы можете извлечь этот файл из живого файла:

git checkout live .htaccess

Теперь ваше рабочее дерево содержит все изменения со стадии, за исключением .htaccess и вы можете завершить коммит слияния:

git commit -m "Pulled changes from stage" -a
...