Pull to refresh

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

Git *
Awaiting invitation
Если внести файл в .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) и мы сможем снова работать, делать коммиты и переключаться между ветками.

P.S. Разумеется автор не рекомендует хранить конфиги с паролями в репозитории. Это лишь наглядный пример.

Модератору: Данный 2do list писал ранее для себя в жж (https://pashakiz.livejournal.com/183468.html)
Если для хабра это важно — могу скрыть свою пост в жж под ключ.
Tags:
Hubs:
You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.