Возможно ли, что вы случайно создали где-то неисполняемый файл git-co
? Я могу воссоздать вашу ситуацию, если я это сделаю, как показано ниже.
$ git --version
git version 1.7.7.1.475.g997a1
$ git config --get-regexp '^alias\.co$'
alias.co checkout
$ git co b1
Switched to branch 'b1'
$ touch $HOME/bin/git-co
$ ls -al $HOME/bin/git-co
-rw-r--r-- 1 user user 0 2011-11-03 12:59 /home/user/bin/git-co
$ git co master
fatal: cannot exec 'git-co': Permission denied
$ for p in $(echo "$PATH" | sed -e 's/:/ /g'); do if [ -f "${p}/git-co" ]; then echo "Found git-co in ${p}"; fi; done
Found git-co in /home/user/bin
$ rm $HOME/bin/git-co
rm: remove regular empty file `/home/user/bin/git-co'? y
$ git co master
Switched to branch 'master'
Еще одна вещь, которую вы можете попробовать - включить ведение журнала трассировки, чтобы получить больше информации о том, что делает Git. Ниже приведен пример:
GIT_TRACE=$HOME/trace.log git co master
Вы должны использовать абсолютные пути, если хотите отправить вывод в файл. В противном случае используйте true
или 1
для отправки вывода со стандартной ошибкой; например GIT_TRACE=1
. Файл trace.log
содержит:
trace: exec: 'git-co' 'master'
trace: run_command: 'git-co' 'master'
trace: alias expansion: co => 'checkout'
trace: built-in: git 'checkout' 'master'
Если вы не видите вывод журнала трассировки trace: alias expansion: co=> 'checkout'
, Git находит файл git-co
в переменной среды PATH
. Git использует PATH
следующим образом:
- Начните с пустого
PATH
, сохранив любой "старый" PATH
для справки.
- Если найден параметр
--exec-path=<my git commands path>
Git, добавьте <my git commands path>
к PATH
.
- Если
--exec-path=<my git commands path>
не был найден и установлена переменная окружения GIT_EXEC_PATH
, добавьте это к PATH
.
- Если вы вызвали
git
, используя относительный или абсолютный путь, добавьте абсолютный путь к исполняемому файлу git
к PATH
.
- Если
PATH
был ранее определен, добавьте его к PATH
.
- Если
PATH
не было определено ранее, добавьте /usr/local/bin:/usr/bin:/bin
к PATH
.
Вы можете использовать другой псевдоним, чтобы Git сообщал вам, что он устанавливает для переменной среды PATH
.
$ git config --global alias.whatpath '!echo $PATH'
$ git whatpath
/usr/local/libexec/git-core:/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Затем проверьте каждый каталог в списке на наличие файла git-co
. Недостаточно сделать which git-co
и предположить, что если ничего не найдено, у вас нет файла git-co
, расположенного в одной из директорий в Git's PATH
; может существовать файл, который не является исполняемым, и which
не будет отображать его.