2011-02-23 319 views
5

我正在寫一個測試套件,運行要在一堆輸入文件中進行測試的工具。對於每個輸入文件,該工具正在創建相應的輸出文件(均爲XML格式)。輸入和輸出文件在Git倉庫中籤入。如何使用git diff -G?

輸出文件包含編譯工具的時間,所以輸出文件在被測試工具重新創建後肯定會被修改。

如果輸出已經改變(當我修改工具的源代碼時),我想要檢查節點OutputFingerprint的內容是否已經改變(對相關部分內容的簡單散列的輸出文件)。

閱讀手冊git-diff,我發現有一個-G選項:

-G <正則表達式>
查找其添加或刪除行給定的正則表達式<匹配>差異。

不幸的是,他們沒有提供如何使用-G選項的示例。

我首先想到的是簡單地寫

git diff -GOutputFingerprint 

但這是錯誤的:

> git diff -GOutputFingerprint 
error: invalid option: -GOutputFingerprint 

下一個想法是把在斜線正則表達式,這也是不成功:

> git diff -G/OutputFingerprint/ 
error: invalid option: -GC:/Program Files/Git/OutputFingerprint/ 

此外,只需在-G和之間加一個空格210不起作用:

> git diff -G OutputFingerprint 
fatal: ambiguous argument 'OutputFingerprint': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 

當我打電話git diff沒有任何參數,可以讓我的修改:

- <OutputFingerprint>e45807ca76fc5bb78e9e928c6fb7eed6</OutputFingerprint> 
+ <OutputFingerprint>d0846851bc9d52b37f7919def78660a2</OutputFingerprint> 

另一種認爲是使用git diff -S".*OutputFingerprint.*" --pickaxe-regex,但這也是沒有成功。

git --version給我git version 1.7.3.1.msysgit.0如果這是相關的。

當我詢問git diff --help時,所提供的手冊顯示了-G選項。

那麼,有誰能爲我提供一個如何正確使用git diff -G的例子嗎?

+0

嘗試添加'G'和正則表達式之間的空間? – sarnold 2011-02-23 09:17:49

+1

嘿,我的git 1.7.1沒有'-G'選項 - 我想知道你的是否支持'-G'?您可能需要更新的版本來支持您想要做的事情。 – sarnold 2011-02-23 09:30:07

+0

只是爲了確認,是否有實際的變化來報告?如果沒有未提交的更改,即使沒有'-G',我也會得到「未知版本」的錯誤...只要確保在嘗試過濾之前獲得了_some_種類的差異即可。 – sarnold 2011-02-23 09:44:33

回答

5
git diff -Garegex 

運行正常與msysgit 1.7.4,但只在bash命令(在DO​​S會話,它沒有返回值)

它會顯示diff如果正則表達式匹配的行添加從分階段版本中刪除
增加刪除沒有改變
意義在你的情況,它不會工作

的OP eckes報告它的工作原理(與msysgit1.7.4 +只),並補充說,diff man page-G選項包括:

「尋找添加的刪除的行與給定的正則表達式匹配的差異」,
,其涉及差異輸出其中更改的行將打印爲一個已添加的行和一個已刪除的行


例子:我添加一個新行 'AAA'(無git add:只是一個簡單的編輯)

$ git diff -Gaaa 

diff --git a/conf/fragments/xxx_repos.conf b/conf/fragments/xxx_repos.coindex 263fa85..3475f9b 100644 
--- a/conf/fragments/xxx_repos.conf 
+++ b/conf/fragments/xxx_repos.conf 
@@ -10,3 +10,4 @@ repo xxx-sdsfwk 
    RW+        = vonc user1 user2 
    RW         = @xxx_users 
xxx-sdsfwk "Owner" = "for..." 
+aaa 
+0

@eckes:我已經通過澄清和示例更新了我的答案。對於更改,相信一個簡單的''git diff | grep ...''就夠了) – VonC 2011-02-23 12:59:13

+0

指點我msysgit 1.7.4是正確的方法! 'git diff -GOutputFingerprint'現在向我顯示'OutputFingerprint'被**改變了**。正是我需要的。謝謝! – eckes 2011-02-23 13:01:23

+0

@VonC:如果我無法單獨使用git方法,回落到'grep'會成爲我的選擇。但現在,沒有必要...... – eckes 2011-02-23 13:02:43