Я и ещё один программист работаем с проектом через bare-репозиторий. В проекте есть файл
includes/config.php
, который у меня имеет специфичные настройки. Чтобы данные изменения не отправлялись в центральный bare-репозиторий, я добавил его в файл
.git/info/exclude
. Всё бы ничего, но при таком подходе периодически возникают проблемы следующего характера:
1. в файл
includes/config.php
внесли глобальные изменения которые у меня тоже должны быть.
При попытке сделать
git pull origin master
получаем сообщение:
error: Your local changes to the following files would be overwritten by merge:
includes/config.php
Please, commit your changes or stash them before you can merge.
Aborting
Не страшно, удаляем файл
includes/config.php
, успешно делаем
git pull origin master
, восстанавливаем удалённый файл, и скрываем факт того, что в данный файл были внесены изменения
git update-index --assume-unchanged includes/config.php
Не понятно, почему Git автоматически не игнорирует эти изменения, файл ведь в исключении находится.
2. После выполнения предыдущего пункта появляется ещё одна проблема — невозможно переключиться на какую-либо ветку, которая создавалась ранее.
Получаем сообщение:
$ git checkout test_branch
error: Your local changes to the following files would be overwritten by checkout:
includes/config.php
Please, commit your changes or stash them before you can switch branches.
Aborting
В данном случае помогает только
git rebase
. Но это не всегда приемлемо, потому как изменяются даты внесения коммитов.
Всё это напоминает пляски с бубном.
Я понимаю что можно сделать отдельный локальный файл настроек и внести его в
.gitignore
, но это не от меня зависит и нужно как-то выходить из сложившейся ситуации своими силами.
Какие есть решения данной проблемы?