Как я могу слить в Git, не меняя конфигурационные файлы в master?
У нас есть несколько файлов конфигурации, которые содержат информацию, такую как URL, которую необходимо изменить для нашей среды разработки. Мы создаем среду разработчика как ветку в git и вносим изменения в файлы конфигурации. Проблема в том, что когда мы объединяем ветку разработки обратно с главной веткой, она изменяет файлы конфигурации в главной ветке.
Мы хотели бы хранить файлы в git, поэтому я не верю, что мы можем использовать.gitignore. Нам нужно сохранить весь наш источник в репо, так как мы используем эластичный бобовый стебель, и нам нужно каждый раз развертывать весь источник.
Мы попытались использовать.gitattributes и прочитали многие посты, такие как Как мне сказать git всегда выбирать мою локальную версию для конфликтующих слияний в определенном файле?, но похоже, что драйвер слияния, который вы установили в.gitattributes, будет вызываться только в случае изменения обоих файлов. В нашем случае мы не будем изменять файлы конфигурации в основной ветке, поэтому драйвер слияния никогда не вызывается.
Есть ли простой способ сделать это без написания сценария?
3 ответа
После изучения ряда команд git, таких как rebase и fetch, я нашел простой способ сделать это. Просто создайте ветку как потерянную, скопируйте в нее файлы конфигурации и используйте команду "git checkout configs_branch - . ", Чтобы по существу скопировать файлы конфигурации в родительскую ветку.
Итак, подробно:
инициализировать git-репо с помощью URL-адреса репо
git remote add origin (URL удаленного хранилища)
убедитесь, что вы находитесь в той ветке, из которой хотите создать ветку
создайте ветку, которая будет содержать файлы конфигурации как ветвь для сирот, чтобы ветка не содержала весь ваш исходный код
git checkout --orphan configs_branch
скопируйте файлы конфигурации в эту ветку репозитория, добавьте файлы, подтвердите и нажмите
Git добавить.
Git commit -m "начальный коммит с конфигурационными файлами"
git push origin configs_url
ПОСЛЕ УСПЕШНОГО СЛИЯНИЯ
из родительской ветви
git checkout parentbranchname
мерзавец - все
скопировать файлы из ветки config в родительскую ветку
git checkout configs_branch -.
(вы все еще будете в родительской ветви после вышеуказанной команды)
зафиксировать файлы
git commit -m "сброс файлов конфигурации"
Спасибо @vampire за вашу помощь!
Решение простое: не фиксируйте файл конфигурации.
Создайте файл конфигурации шаблона и зафиксируйте его. При установке приложения скопируйте шаблон и измените то, что нужно изменить. Сохраните настоящий файл конфигурации в.gitignore, чтобы избежать случайных коммитов.
Расширенное использование заключается в создании двух файлов конфигурации: значений по умолчанию для приложения и локальных переопределений. По умолчанию зафиксировано, локальные переопределения не зафиксированы. Преимущество этого подхода состоит в том, что вы переопределяете только то, что вам нужно, и оставляете другие значения неуказанными, поэтому при изменении значения по умолчанию вам не нужно обновлять локальную конфигурацию переопределения. Недостатком является то, что вы должны загрузить и объединить два файла конфигурации во время инициализации вашего приложения.
Вы просили решения без необходимости написания сценария. Мое решение включает в себя сценарии. Однако они уже написаны.
1) Создайте собственный драйвер слияния, который будет игнорировать конфликты слияния для соответствующего файла. Драйвер должен быть зарегистрирован для каждого файла в.gitattributes
2) Создайте конфликты слияния при каждом коммите в этом файле (в противном случае слияние тривиально и драйвер слияния не будет использоваться). Это можно сделать с помощью ловушки post-commit в.git/hooks/post-commit, которая изменяет этот файл в каждой ветке после каждой фиксации.
Я комбинировал это в некоторых скриптах: https://github.com/keepitfree/faithfulgit