Почему удаленный компьютер видит локальные изменения в файле, который я исключил, когда я ожидаю, что удаленный пользователь не будет знать об изменениях в исключенном файле?
Потому что это не то, что assume-unchanged
делает ; на самом деле это для совершенно противоположной цели (жирным шрифтом добавлено):
Предположим, без изменений нельзя злоупотреблять механизмом игнорирования. Это
«Я знаю, что моя файловая система работает медленно. Я обещаю Git, что
Я не буду менять эти пути, делая их с этим битом - таким образом,
Git не должен проверять, менял ли я там каждый раз, когда я
попросить вывод 'git status' ". Это не означает ничего, кроме
тот. Тем более, это не обещание Git, что Git всегда будет
считают, что эти пути не изменены --- если Git может определить путь
помеченный как предполагаемый неизменный, изменился без
дополнительная стоимость lstat (2) оставляет за собой право сообщить, что путь
был изменен (в результате "git commit -a" может свободно коммитить
это изменение).
Да, существует множество ресурсов, рекомендующих assume-unchanged
игнорировать локальные изменения отслеживаемого файла. Они почти все не правы, и вопрос, о котором вы спрашиваете, - один из способов, которым это может не сработать.
К сожалению, assume-unchanged
часто выглядит так, будто игнорирует изменения в файлах, поэтому люди продолжают его использовать и рекомендуют.
Как мне обойти эту проблему?
skip-worktree
- лучший вариант , но он также не идеально подходит. Гораздо лучшим решением является координация с вашей командой , переименование отслеживаемого файла в td_config.template.php
или аналогичное и игнорирование td_config.php
.
.
Не боритесь с Гитом; используйте его так, как он предназначен. Он не предоставляет механизм игнорирования отслеживаемого файла, и все текущие обходные пути так или иначе имеют недостатки.
(Если вы действительно хотите игнорировать этот совет, вы сможете git update-index --no-assume-unchanged
файл, затем сохранить ваши изменения, затем потянуть, затем применить ваши изменения, а затем повторно применить бит. Но делайте это, зная, что это не делает то, что вы хотите .
Edit:
ОП прокомментировал, что
Когда я изначально настроил это, я попробовал update-index, skip-worktree и файл исключения ... так что на данный момент довольно сложно понять, насколько точно git отслеживает или не отслеживает файл.
Запуск git ls-files -v config/td_config.php
помогает нам выяснить, какие из этих настроек активны в этом файле. В этом случае мы получили
S config/td_config.php
Заглавная буква S показывает, что skip-worktree
установлено и что assume-unchanged
не задано в файле. Выполнение git update-index --no-skip-worktree config/td_config.php
должно вернуть его в «обычное состояние», после чего можно использовать любое из предыдущих предложений.