Конечно, я делаю это время от времени, используя
git update-index --assume-unchanged [<file> ...]
Чтобы отменить и снова начать отслеживание (если вы забыли, какие файлы не были отслежены, см. Этот вопрос ):
git update-index --no-assume-unchanged [<file> ...]
Соответствующая документация :
- [нет-] предполагают, без изменений
Когда указан этот флаг, имена объектов, записанные для путей, не обновляются. Вместо этого, эта опция устанавливает / отменяет бит «предположить неизменным» для путей. Когда бит «предположить, что без изменений» включен, пользователь обещает не изменять файл и позволяет Git предполагать, что файл рабочего дерева соответствует тому, что записано в индексе. Если вы хотите изменить файл рабочего дерева, вам нужно сбросить бит, чтобы сообщить Git. Это иногда полезно при работе с большим проектом в файловой системе с очень медленным системным вызовом lstat(2)
(например, cifs).
Git завершится неудачно (изящно), если ему нужно изменить этот файл в индексе, например. при слиянии в коммите; таким образом, в случае, если предполагаемый неотслеживаемый файл будет изменен в восходящем направлении, вам нужно будет обработать ситуацию вручную.
Сбой в этом случае означает, что если есть какие-либо изменения перед этим файлом (допустимые изменения и т. Д.), Когда вы выполняете извлечение, он скажет:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
и откажется от слияния.
В этот момент вы можете преодолеть это путем отмены локальных изменений, вот один из способов:
$ git checkout filename.ext
затем снова потяните и измените локальный файл, или вы можете установить –no-assume-unchanged
, и вы сможете в этот момент выполнять обычное копирование, слияние и т. Д.