Git-игнорировать файлы во время слияния
у меня есть РЕПО под названием myrepo
на пульт beanstalk
сервер.
я клонировал его на свою локальную машину. Создано две дополнительные ветви:staging
и dev
.
Отодвинул и эти ветки.
теперь:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
у меня есть файл с названием config.xml
который отличается на каждой ветви.
Я хочу игнорировать этот файл только во время слияний. Но я хочу, чтобы это было включено, когда я проверяю или совершаю из / в репо отделение.
причина, по которой я хочу это, у нас есть сценарий развертывания, который тянет (проверка) конкретную ветку и развертывает на соответствующих серверах. Так что нам нужно config.xml
файл этой конкретной ветви переходит на конкретный сервер, как указано выше при развертывании.
Я думаю .gitignore
не будет работать. Какие еще варианты? Обратите внимание, что игнорируемый файл должен быть частью проверки и фиксации, что важно. его следует игнорировать только во время поглощает.
спасибо!
6 ответов
Я преодолел эту проблему, используя команду слияния git с --no-commit
параметр, а затем явно удалил поэтапный файл и проигнорировал изменения в файле.
Например: скажем, я хочу игнорировать любые изменения в myfile.txt
Я ДЕЙСТВУЮ следующим образом:
git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"
вы можете поместить операторы 2 & 3 в цикл for, если у вас есть список файлов для пропуска.
Я закончил тем, что нашел git attributes
. Пробуя его. Пока работает. Еще не все сценарии проверил. Но это должно быть решением.
.gitattributes
- файл корневого уровня репозитория, определяющий атрибуты подкаталога или подмножества файлов.
вы можете указать атрибут, чтобы сказать Git использовать различные стратегии слияния для определенного файла. Здесь мы хотим сохранить существующее config.xml
для нашего филиала.
Нам нужно установить merge=ours
до config.xml
на .
merge=ours
скажите git использовать наш (текущий филиал) файл, если конфликт слияния происходит.
добавить
.gitattributes
файл на корневом уровне репозитория-
вы можете настроить атрибут для confix.xml в
config.xml merge=ours
-
а затем определите фиктивную нашу стратегию слияния с:
$ git config --global merge.ours.driver true
если вы объедините stag
форма dev
ветки, вместо конфликтов слияния с config.xml-файл, конфигурация филиала stag.xml сохранить при любом версия изначально была.
Вы можете начать с помощью git merge --no-commit
, а затем отредактировать объединить, как вам нравится, т. е. путем индексации config.xml
или любой другой файл, затем commit. Я подозреваю, что после этого вы захотите автоматизировать его с помощью hooks, но я думаю, что стоит пройти вручную хотя бы один раз.
можно использовать .gitignore
сохранить config.xml
из репозитория, а затем использовать post commit hook загрузить соответствующий config.xml
файл на сервер.
здесь git-update - index-зарегистрировать содержимое файла в рабочем дереве для индекса.
git update-index --assume-unchanged <PATH_OF_THE_FILE>
пример:
git update-index --assume-unchanged somelocation/pom.xml