У меня есть репо 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
сработает. Какие еще варианты? Обратите внимание, что игнорируемый файл должен быть частью проверки и фиксации, что важно. его следует игнорировать только во время слияния.
Спасибо!
Ответы:
Я решил эту проблему, используя команду git merge с
--no-commit
опцией, а затем явно удалил подготовленный файл и проигнорировал изменения в файле. Например: скажем, я хочу игнорировать любые изменения,myfile.txt
я действую следующим образом:Вы можете поместить операторы 2 и 3 в цикл for, если у вас есть список файлов, которые нужно пропустить.
источник
git reset HEAD myfile.txt
именно? Как это помогает в достижении нашей цели?В итоге я нашел мерзавца
attributes
. Пробуем. Пока работает. Еще не проверял все сценарии. Но это должно быть решение.Стратегии слияния - атрибуты Git
источник
.gitattributes
- это файл корневого уровня вашего репозитория, который определяет атрибуты для подкаталога или подмножества файлов.Вы можете указать атрибут, чтобы указать Git использовать разные стратегии слияния для определенного файла. Здесь мы хотим сохранить существующее
config.xml
для нашей ветки. Нам нужно установить ,merge=ours
чтобыconfig.xml
в.gitattributes
файле.merge=ours
скажите git использовать наш файл (текущей ветки), если возникнет конфликт слияния.Добавить
.gitattributes
файл на корневой уровень репозиторияВы можете настроить атрибут для confix.xml в
.gitattributes
файлеА затем определите фиктивную нашу стратегию слияния с помощью:
Если вы объединяете ветвь
stag
формыdev
, вместо конфликта слияния с файлом config.xml, config.xml ветки stag сохранится в той версии, которая у вас была изначально.источник
config.xml
он полностью не изменился от базы слияния до любой версии подсказки ветки, Git просто берет измененную версию, без глядя наmerge.ours.driver
настройку. Так что вы правы, что беспокоитесь.theirs
это встроенная стратегия слияния. Но мне кажется , что можно писать<pattern> merge=foo
, а затемgit config --global merge.foo.driver true
, и он будет работать точно так же.Вы можете начать с использования
git merge --no-commit
, а затем отредактировать слияние, как вам нравится, например, отключив установкуconfig.xml
или любой другой файл, а затем зафиксировать. Я подозреваю, что после этого вы захотите автоматизировать это дальше, используя хуки, но я думаю, что стоит хотя бы раз пройти вручную.источник
git attributes
предложить какие - либо прямые решения? Я не могу этого понять. git-scm.com/book/en/…Вы можете использовать,
.gitignore
чтобы не допуститьconfig.xml
попадания в репозиторий, а затем использовать обработчик post commit, чтобы загрузить соответствующийconfig.xml
файл на сервер.источник
attributes
. Есть идеи, как это работает? Я не могу этого понять. git-scm.com/book/en/…Пример:
master
,develop
develop
ветке и хотите игнорировать его при слиянииКод:
Вы также можете игнорировать файлы с таким же расширением
например все файлы с
.txt
расширением:источник
Здесь git-update-index - Зарегистрируйте содержимое файла в рабочем дереве в index.
Пример:-
источник