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 merge с
--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 в
.gitattributesfileconfig.xml merge=oursа затем определить фиктивную нашу стратегию слияния с:
$ git config --global merge.ours.driver trueесли вы объедините
stagформаdevветки, вместо конфликтов слияния с config.xml-файл, конфигурация ветви оленя.xml сохранить в любом случае версия у вас изначально была.
Вы можете начать с помощью
git merge --no-commit, а затем отредактировать объединить, как вам нравится, т. е. путем индексацииconfig.xmlили любой другой файл, а затем зафиксировать. Я подозреваю, что вы захотите автоматизировать его дальше после этого, используя крючки, но я думаю, что стоит пройти вручную хотя бы один раз.
вы могли бы использовать
.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
Comments