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