2014-02-25 51 views
0

我正在编写一个应用程序来在Git和ClearCase存储库之间来回移动提交。git diff在命令行但不在Python中的问题

的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> 

与此类似,如果我运行此命令行(显示的diff,不只是重命名的文件),我得到的输出:

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

这看起来应该可以工作。我知道msysgit由于Windows有奇怪(虽然我不使用Windows,所以我不知道各种破碎的比特),所以我会尝试的第一件事是:当你给'git diff'的时候''.. B'语法的行为与'git diff AB'相同,所以用两个单独的参数替换'A..B'部分会使msysgit表现得更好。 (但这只是在黑暗中拍摄的。) – torek

+0

@torek感谢您的建议,我曾尝试过,恐怕行为是一样的。 –

回答

0

事实证明,如果不使用'..'并且将哈巴码的另一端放入哈希函数,则可以在命令行和Python下进行处理。

所以这个:

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

变为这样:

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

,一切工作一种享受!

+0

您应该接受自己的答案,将问题标记为“已回答”。 – lrineau

+0

@lrineau我会尽快接受它,但接受您自己的答案有时间限制。 –

+0

的确,我忘了48小时的延迟:http://stackoverflow.com/help/self-answer – lrineau