Конечно, я делаю это время от времени, используя
git update-index --assume-unchanged [<file> ...]
Чтобы отменить и снова начать отслеживание (если вы забыли, какие файлы не были отслежены, посмотрите этот вопрос ):
git update-index --no-assume-unchanged [<file> ...]
Соответствующая документация :
- [no-] предположить-без изменений
Когда указан этот флаг, имена объектов, записанные для путей, не обновляются. Вместо этого, эта опция устанавливает / отменяет бит «предположить неизменным» для путей. Когда бит «предположить, что без изменений» включен, пользователь обещает не изменять файл и позволяет 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
и вы можете сделать обычное копирование и слияние и т. д. в этот момент.