Почему некоторые команды git не разрешены в каталоге .git? - PullRequest
7 голосов
/ 02 апреля 2012

Кажется, есть некоторая несогласованность относительно того, какие команды разрешены, когда вы находитесь в каталоге .git, а какие нет.Например,

git symbolic-ref HEAD

или

git diff --staged

в порядке.

Но

git diff

или

git status

выдает сообщение об ошибке: fatal: This operation must be run in a work tree

Еще более удивительно : создайте псевдоним одной из вышеперечисленных неудачных команд, например git st для git status и , затемработает !

Есть ли логическое объяснение всему этому?И почему псевдоним сбойной команды вдруг сработает только потому, что это псевдоним ??

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Есть логическое объяснение.Команды с аргументами , которые потерпели неудачу, сделали это, потому что они требуют рабочего дерева, а когда вы находитесь в репозитории .git, рабочего дерева нет, только файлы репозитория.Другие команды с аргументами выполнены успешно, поскольку они не требуют рабочего дерева.

1 голос
/ 02 апреля 2012

Существует несколько коммитов Git ( git-обертка: разрешить вызов setup_git_directory_gently () ранее , Вызов setup_git_directory () намного раньше и git --paginate: paginate externalснова команды ), которые касаются происходящего.Различное поведение встроенных команд и псевдонимов, по-видимому, связано с предыдущими проблемами, когда встроенным командам требовалось раньше получить информацию о конфигурации Git, что требовало определения каталога Git и рабочего дерева для получения настроек, специфичных для репозитория.

Еслиу вас есть источник Git локально, вы можете выполнить git log --grep='setup_git_directory_gently', чтобы получить список коммитов, связанных с поведением, которое вы замечаете.

Для того, почему псевдонимы ведут себя так же, как они, Принимать псевдонимы git снаружирепозиторий git объясняет:

af05d67 (всегда установлен * nongit_ok в setup_git_directory_gently (), 2008-03-25) изменилось из первоначально представленного патча, что привело к отключению псевдонимов вне gitрепозиторий.

Оказывается, что некоторые люди использовали "alias.fubar = diff --color-words" в $ HOME / .gitconfig для использования неиндексного diff (или любой команды, которая не нуждается в репозитории git).за пределами git-репозиториев, и это изменение сломало их, так что это воскрешает поддержку таких насвозраст.

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