Почему мерзавец повреждается, если '/' корень репозитория?

Мы хотели бы использовать мерзавца для поддержания конфигураций системы. Поскольку иногда данные конфигурации существуют за пределами / и т.д., мы начали делать что-то вроде этого в наших системах:

  # 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 предназначил..., но это - боль. Я не хочу устанавливать его в среде в одностороннем порядке (потому что это конфликтовало бы с использованием мерзавца в других репозиториях), и я хотел бы избежать сценария обертки. У меня есть какие-либо другие опции?

6
задан larsks 23 December 2009 в 02:17
поделиться

2 ответа

Установка опции core.worktree в репозитории хорошо справляется:

git config core.worktree /

Это работает намного лучше, чем установка GIT_WORK_TREE в среде. Ура!

3
ответ дан 17 December 2019 в 00:10
поделиться

Это полная догадка, которую вы могли бы использовать для дальнейших исследований, но я подозреваю, что поведение git'а "find the .git directory" взаимодействует с тем фактом, что / является его собственной родительской директорией. Возможно, логика "stop at the root" имеет ошибку типа fence post.

.
4
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: