git diff在命令行上工作但在Python中没有问题

时间:2014-02-25 16:40:40

标签: python git python-2.7 git-diff

我正在编写一个应用程序来在Git和ClearCase存储库之间来回移动提交。

Git版本是:1.8.3.msysgit.0

代码是用Python(2.7.5)编写的,我遇到了一个奇怪的错误。命令行上的行为和应用程序中相同命令的行为是不同的:

从我的应用程序日志中,我得到了这个::

[git diff --name-status -M -z --ignore-submodules 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --] exit code: 128
Command output for [git diff --name-status -M -z --ignore-submodules 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --]:
stderr >> fatal: bad revision '4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac'

但是,在同一Windows命令行中,没有结果,但也没有错误:

C:\Temp\gitcc_test>git diff --name-status -M -z --ignore-submodules 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --

C:\Temp\gitcc_test>

在类似的说明中,如果我运行此命令行(显示差异,而不仅仅是重命名的文件),我会得到输出:

C:\Temp\gitcc_test>git diff --ignore-submodules 6a4db18a0048db2dfe0e6639cabcdf10e265a1b6..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --
diff --git a/hello.txt b/hello.txt
index 3eecb7d..da588dd 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Bonjour!
+Hello!

C:\Temp\gitcc_test>

但是这个命令什么都不返回:

C:\Temp\gitcc_test>git diff --ignore-submodules 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --

C:\Temp\gitcc_test>

4dc7的父提交...是6a4d ...,为什么4dc7 ... ^为什么不给我任何结果?

提前致谢!

1 个答案:

答案 0 :(得分:0)

事实证明,不使用'..'并将插入符号放在散列的另一端就可以在命令行和Python下使用。

所以这个:

git diff --name-status -M -z --ignore-submodules 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac^..4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --

成为这个:

git diff --name-status -M -z --ignore-submodules ^4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac 4dc7ad29d69ee2385802b262bfb9a4f1e28f10ac --

一切都很有效!