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

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


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

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

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

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

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

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

    $ 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