Использование `git --git-dir / path / to / git pull / path / to / other / bare-git master` автоматически не обновляет рабочее дерево.Почему бы и нет? - PullRequest
6 голосов
/ 17 марта 2012

Я обнаружил странное поведение с помощью git и могу воспроизводить его каждый раз на своей машине.

Если у меня есть два локальных репозитория, один в папке express.git, а другой - безс рабочим деревом внутри папки express, оба в одной родительской папке, я могу выполнить команду git pull ../express.git из папки express.Это автоматически обновляет все внутри express.

Однако, если я запускаю команду git --git-dir /home/cisw470p/stu006/express/.git pull /home/cisw470p/stu006/express.git master из местоположения, не расположенного в любом из репозиториев git, то репозиторий express будет извлекать изменения, но не будет автоматическиобновить рабочее дерево.Затем мне нужно запустить git add ., чтобы добавить все изменения, а затем сделать еще один коммит внутри express, и теперь все хорошо.

Почему длинная версия команды не использует --git-опция dir автоматически не обновляет рабочее дерево для express?Есть ли причина для этого, или я нашел ошибку?

РЕДАКТИРОВАТЬ: Я просто попробовал это снова, но отредактировал другой файл, и теперь это работает.Я полностью потерян.

1 Ответ

10 голосов
/ 17 марта 2012

Если вы запустите git --git-dir=some/dir/.git pull, по умолчанию git будет считать текущий каталог рабочим деревом.Не родитель some/dir/.git, а ваш текущий pwd.Это означает, что выполнение этой команды попытается обновить текущий каталог, как если бы оно было рабочим деревом, и в конечном итоге будет записывать в ваш pwd файлы, которые там не принадлежат.Флаг --work-tree вместе с --git-dir указывает, где находится дерево работы.В этом случае вы бы хотели git --git-dir=some/dir/.git --work-tree=some/dir pull.Однако после экспериментов здесь возникает вторая проблема.Если вы попробуете эту команду как есть, вам, вероятно, сообщат git-pull cannot be used without a working tree.Кажется, проблема здесь в том, что git нужно, чтобы его рабочее дерево было абсолютным путем, а не относительным.

Что вы действительно хотите запустить, это git --git-dir=some/dir/.git --work-tree="$PWD"/some/dir pull.В качестве альтернативы, вы можете просто попробовать cd some/dir && git pull.Если вы не хотите менять свой cwd, вы можете заключить его в подоболочку, то есть ( cd some/dir && git pull ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...