2013-07-31 1 views
1

Теперь у меня есть git-репозиторий на компьютере под управлением Windows и вы хотите запустить автоматические тесты в этом репозитории с помощью Perl. Для того, чтобы убедиться, что каждый раз, когда я запускаю тест хранилище является последним, я использую:«git pull» возвращает ошибку в командной строке Windows

system("git pull"); 

перед испытанием.

Но он возвращает ошибку:

fatal: Uh oh. Your system reports no Git commands at all. 

Однако, когда я бегу git show по той же методике, как:

system("git show"); 

Выход ОК, который должен сказать, командную строку в Windows признал команда git (и она существует в системе PATH). Итак, почему некоторые команды git могут преуспеть, а другие не могут?

PS: Я использую Git Bash, если я запускаю скрипт Perl из git bash, то оба git pull и git show работают. Но я ожидаю двойного щелчка на скрипте perl, чтобы запустить его вместо вызова его из оболочки Git Bash.

+0

Как вы можете найти git при запуске 'git pull'? Вы добавили его в свой «PATH»? – Chronial

+0

@Chronial Да, я добавил его в систему PATH. В противном случае «git show» также потерпит неудачу. –

ответ

2

Убедитесь, что это не проблема пути, как объясняется в this link (для окон, но действительна и для других ОС). Проверьте также, если у вас нет активного git-псевдонима, который может помешать git pull работать правильно.

Что касается вопроса траектории OP aladine подтверждает в комментариях:

I discover that after I reinstall git, it works as normal. 
1

The link в ответе @lord_linus помог решить мою проблему, но я хотел бы сделать его более ясным.

Действительно, это проблема пути. Поскольку я надеюсь использовать команду git с командной строкой Windows, я добавил путь команды git (для меня это D:\Git\Bin) в PATH в переменных среды.

Сейчас в Git Bash там уже две команды: git

$ which git 
git is /bin/git 
git is /Bin/git 

И в командной строке есть один git команда:

C:\>where git 
D:\Git\bin\git.exe 

Я думаю, что перепутала пути. Мое решение заключается в использовании D:\Git\bin\git.exe вместо git, поэтому в моем сценарии Perl я написал:

my $git = `where git`; 
system("$git pull"); 

Эта работа вокруг может работать, как я ожидал.