现在我在Windows机器上有一个git存储库,并希望使用Perl在这个存储库上运行自动测试。为了确保每次启动测试时存储库都是最新的,我使用:
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
,如果我从git bash启动Perl脚本,git pull
和git show
都可以正常工作。但我的期望是双击perl脚本来运行它而不是从Git Bash
shell调用它。
答案 0 :(得分:2)
确保这不是路径问题,如this link 中所述(对于Windows,但对其他操作系统也有效)。 检查您是否没有任何可能阻止git pull正常工作的活动git别名。
关于路径问题,OP aladine 在评论中确认:
I discover that after I reinstall git, it works as normal.
答案 1 :(得分:1)
The link帮助解决了我的问题,但我想说清楚一点。
确实这是一个路径问题。由于我希望在Windows的命令提示符中使用git
命令,因此我在环境变量中将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");
这项工作可以按照我的预期运作。