Git workflow: могу ли я предотвратить присоединение определенного файла к другому ветки, но все еще держать его под контролем версии?
У меня есть репозиторий с двумя ветвями: live и stage. В хранилище содержится код для веб-приложения. Я хотел бы поддерживать два разных файла .htaccess для сцены и живых ветвей, но все же держать их в управлении версиями, поскольку характер обслуживания сайта сцены немного отличается (прямо сейчас, например, я хочу, чтобы тайники были синхронизированы по-разному).
Я новичок с git, поэтому есть, вероятно, простое объяснение, но я хотел бы иметь рабочий процесс, где, когда я был в живых, и я вытащил изменения (простой git merge stage
), я не сделал перезапишите существующий .htaccess в прямой ветке. Есть ли способ настроить это? Я пропустил какую-то большую концепцию в git?
Аналогично, есть также часть (но возможно много).html файлов, где я хотел бы отслеживать изменения, но не объединять их в live. Чтобы быть ясным, я хочу, чтобы в реальном времени и на сцене отслеживались изменения в этих файлах, но они не должны сливать эти определенные изменения при слиянии.
Ответы
Ответ 1
Я нашел ответ по другому вопросу о переполнении стека, кредит отправляется на fcurella:
Предположим, вы хотите исключить файл config.php
На ветке A:
-
Создайте файл с именем .gitattributes
в том же каталоге, с этой строкой: config.php merge=ours
. Это сообщает git, какую стратегию использовать при слиянии файла. В этом случае он всегда сохраняет вашу версию, т.е. версию на ветке, в которую вы сливаетесь.
-
Добавить файл .gitattributes
и зафиксировать
На ветке B: повторите шаги 1-2
Попробуйте слить сейчас. Ваш файл должен быть оставлен нетронутым.
Это похоже на более масштабируемое решение.
Ответ 2
Ankur, попробуйте следующее:
Предполагая, что вы проверили живую ветку, запустите:
git merge --no-commit --no-ff stage
Это приведет к объединению двух ветвей, но вместо того, чтобы сделать новый коммит, произойдет сбой и оставит эти изменения в вашем индексном файле и рабочем каталоге. Теперь, поскольку вы хотите сохранить ваш файл .htaccess
неповрежденным в живой ветке, вы можете проверить этот файл в прямом эфире:
git checkout live .htaccess
Теперь ваше рабочее дерево имеет все изменения с этапа, за исключением .htaccess
, и поэтому вы можете завершить компиляцию слиянием:
git commit -m "Pulled changes from stage" -a