2010-06-25 54 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