February 17, 2017

Git: игнорирование отслеживания файлов, которые уже есть в удаленном репозитории

Если внести файл в .gitignore то он не будет отслеживаться гитом лишь в том случае, если этого файла еще не было в репозитории.

Но если в репозитории уже есть (к примеру конфиги сайта), а мы не хотим, чтобы наши конфиги отслеживались, то можно выполнить команду

git update-index --assume-unchanged application/config/database.php

либо всю папку

git update-index --assume-unchanged application/config/*

Чтобы перестать игнорировать изменения нужно использовать параметр --no-assume-unchanged .

git update-index --no-assume-unchanged application/config/*

Update:

Если всё же кто-то изменил структуру файла конфига, то git не даст сделать pull, т.к. все-равно будет считать, что файл конфига с нашими паролями отличается от того, что прийдет с командой pull. Чтобы все-таки получить новые изменения, но и свои пароли сохранить в конфиге нужно сделать следующее:

1. Сохранить текущие конфиги (с нашими локальными паролями) в отдельную папку (на всякий случай)
2. Отменить игнорирование изменений (параметр --no-assume-unchanged).

git update-index --no-assume-unchanged application/config/database.php

3. На данном шаге команда git status покажет, что файл application/config/database.php был изменен, но еще не проиндексирован. Именно эти изменения и мешают нам забрать командой git pull новые изменения. Учитывая, что на шаге 1 мы сохранили наши конфиги в отдельную папку мы можем сейчас отменить эти изменения.

git checkout application/config/database.php

4. Сейчас команда git status покажет, что изменений нет (nothing to commit, working tree clean). Забираем новые изменения:

git pull

5. Опционально: Если мы привыкли работать в отдельной ветке (не в master), то переходим в эту ветку (например: dev-branch) для последующей работы:

git checkout dev-branch

и вливаем в ветку dev-branch новые изменения из ветки master (куда мы их уже получили командой git pull):

git merge master

6. Изменяем теперь наши обновленные конфиги, возвращая туда наши локальные пароли и все то, что мы желаем там видеть, но не хотим это хранить в репозитории (для этого мы сохранили все в шаге 1). После чего команда git status естественно покажет, что конфиги изменены, но не проиндексированы.
7. И только теперь мы можем снова включить игнорирование (--assume-unchanged):

git update-index --assume-unchanged application/config/database.php

После чего команда git status покажет, что все чисто (nothing to commit, working tree clean) и мы сможем снова работать, делать коммиты и переключаться между ветками.