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