Мы хотели бы использовать мерзавца для поддержания конфигураций системы. Поскольку иногда данные конфигурации существуют за пределами / и т.д., мы начали делать что-то вроде этого в наших системах:
# cd /
# git init
# git add etc
# git add some/other/path
# git commit -m 'initial import'
И т.д. Это работает в какой-то степени. Пока Ваш cwd == '/', мерзавец обычно ведет себя. Однако, при попытке, например, выполнить мерзавца из подкаталога:
cd /etc
git status
Вы получаете мусор. В нашем случае, тысячах строк "удаленных": списки для файлов, которые явно все еще существуют. Это поведение, кажется, эксклюзивно рабочему мерзавцу в/; выполнение того же самого где-либо еще работает просто великолепно.
Я могу "зафиксировать" поведение как это:
GIT_WORK_TREE=/ git status
И эй, все работает способ, которым Linus предназначил..., но это - боль. Я не хочу устанавливать его в среде в одностороннем порядке (потому что это конфликтовало бы с использованием мерзавца в других репозиториях), и я хотел бы избежать сценария обертки. У меня есть какие-либо другие опции?
Установка опции core.worktree
в репозитории хорошо справляется:
git config core.worktree /
Это работает намного лучше, чем установка GIT_WORK_TREE в среде. Ура!
Это полная догадка, которую вы могли бы использовать для дальнейших исследований, но я подозреваю, что поведение git'а "find the .git
directory" взаимодействует с тем фактом, что /
является его собственной родительской директорией. Возможно, логика "stop at the root" имеет ошибку типа fence post.