2010-06-25 63 views
3

我試圖差異.cs文件,我使用: git diff HEAD - ./*.cs 它只是沒有工作。請注意,在不同目錄下有幾個cs文件。 什麼是正確的命令?如何使用git diff來僅差異.cs文件

謝謝!


我在windows中使用msysgit。我決定爲它編寫一個python腳本。那就是:

import os 
screenOutput = os.popen('git status').read() 
lines =screenOutput.splitlines() 
keyword = 'modified:' 
cmd = 'git diff HEAD -- ' 
for line in lines: 
    index = line.find(keyword) 
    if(index >= 0): 
     line = line[index + len(keyword) + 1:].strip() 
     if(line.endswith('.cs')): 
      cmd += (line + ' ') 
os.system(cmd)  

腳本捕獲「git的狀態」輸出,搜索與關鍵字行「修改:」,並得到修改後的文件名。它很醜。但它的工作。它可以擴展到處理參數。

回答

2

我可能會嘗試git diff HEAD -- $(find . -name '*.cs'),這樣你就可以給它們提供完整的路徑。不知道這是否會奏效,但它可能會訣竅。

+0

如果您正在嘗試爲git diff head〜5 head執行此操作,它將找不到任何在頭部刪除並匹配所需模式的.cs文件。 – 2010-06-25 17:41:52

+0

這是一個很好的觀點。更完整的答案可能會涉及某種shell腳本來解析'git log'並以這種方式獲取diff目標。這個問題似乎更多地沿着「查找所有未分離的/未提交的.cs文件並顯示差異」的行,所以這就是我的答案傾向於 – Daenyth 2010-06-25 17:50:04

1

git diff **/*.cs爲我做了。

+0

這可能是特定的bash 4,因爲** ** glob僅添加然後。它應該在zsh中工作。 – Daenyth 2010-06-25 15:35:41

+0

這不適用於windows上的MSysGit。他們的bash的實現相當於早於bash 4的東西。 – 2010-06-25 17:39:33

+0

啊,好吧。我使用支持文件路徑中的globs的zsh。這也許可以解釋爲什麼它不適用於msysgit和基於Bash的舊shell。 – 2010-06-26 09:05:57

2

git diff HEAD -- "*.cs"應該工作。

+0

@MattBusche請注意,我建議的命令與OP中的命令略有不同。 – 2013-03-13 01:57:13

+0

@MattBusche另請注意,我剛剛編輯了我的答案,但我建議的命令與OP還是略有不同。 – 2013-03-13 02:16:59