Кто прикоснулся к моему мерзавцу без изменений? - PullRequest
19 голосов
/ 13 сентября 2011

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

git update-index --assume-unchanged someFile.txt

Время от времени, после некоторой работы с репо, этот бит сбрасывается, и файлавтоматически assume-unchanged больше нет.

Кто к этому прикасается?Как я могу сделать этот перманент, пока я явно не скажу git:

git update-index --no-assume-unchanged someFile.txt

Что здесь происходит?


Редактировать : я использую предположение-заключенный бит в конфигурационных файлах, которые изменяются локально и никогда не должны быть зафиксированы, не говоря уже о том, что они были переданы в апстрим.Я не хочу видеть их ни в git status, ни где-либо еще, если только я явно не скажу git, что хочу отредактировать и зафиксировать один из них.


Редактировать : ОК, Я думаю, что мне удалось воспроизвести проблему.

Я зафиксировал файл из другого репо (который не имел его как --assume-unchanged), вытащил мое репо и, конечно же, бит был сброшен.

Таким образом, возникают два вопроса:

  1. Можно ли установить этот бит в центральном авторитетном репо, чтобы он распространялся на все репо?
  2. Возможно ли этосделать этот бит липким даже после удаленных изменений?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

IIRC, если вы проигнорируете версионный файл, он будет вести себя так. Вы можете игнорировать все рабочие деревья из .gitignore или, в частности, рабочее дерево из .git/info/exclude (да, это работает, но не предназначен для выполнения каких-либо действий).

1 голос
/ 11 сентября 2013

Кажется, что --skip-worktree + разреженная проверка может позволить такое поведение.

С git предположить, что без изменений по сравнению с пропуском рабочего дерева - игнорирование символической ссылки ( с некоторыми контекстными изменениями ):

  • Установите для core.sparseCheckout значение true для хранилища.
  • Создайте файл .git/info/sparse-checkout, содержащий два шаблона: * для включения всего и !/path/to/someFile.txt для исключения локального файла 'someFile.txt'.
  • Теперь вручную установите бит skip-worktree в someFile.txt.

Теперь вы можете продолжать, не опасаясь, что git автоматически зафиксирует каталог, но учтите, что у вас все равно будут проблемы, если кто-то явно запустит git add для каталога или любого файла в нем.

Дальнейшие исследования в справочной странице , кажется, указывают, что --skip-worktree больше подходит для рассматриваемого варианта использования.

...