【发布时间】:2014-02-25 16:40:40
【问题描述】:
我正在编写一个应用程序以在 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...^ 不给我任何结果呢?
提前致谢!
【问题讨论】:
-
看起来应该可以。我知道 msysgit 由于 Windows 有一些奇怪的地方(虽然我不使用 Windows,所以不确定各种损坏的位),所以我要尝试的第一件事是:当你给
git diffA..B语法时行为与git diff A B相同,因此也许用两个单独的参数替换A..B部分将使msysgit 表现更好。 (但这只是在黑暗中的一个镜头。) -
@torek 谢谢你的建议,我试过了,恐怕行为是一样的。
标签: python git python-2.7 git-diff