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 не будет работать. Каковы другие варианты? Обратите внимание, что игнорируемый файл должен быть частью проверки и фиксации, что важно. его следует игнорировать только во время поглощает.



спасибо!

1138   6  

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. Пробуя его. Работаю до сих пор. Пока не проверил все сценарии. Но это должно быть решение.

стратегии слияния-атрибуты Git

.gitattributes - это файл корневого уровня вашего репозитория, который определяет атрибуты для подкаталога или подмножества файлов.

вы можете указать атрибут, чтобы Git использовал различные стратегии слияния для конкретного файла. Здесь мы хотим сохранить существующее config.xml для нашего филиала. Нам нужно установить merge=ours до config.xml на .

merge=ours скажите git использовать наш (текущий филиал) файл, если конфликт слияния происходит.

  1. добавить .gitattributes файл на корневом уровне репозитория

  2. вы можете настроить атрибут для confix.xml в .gitattributes file

    config.xml merge=ours
    
  3. а затем определить фиктивную нашу стратегию слияния с:

    $ 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

    Ничего не найдено.