git diff命令用于排除某些文件夹和文件

时间:2018-01-25 01:18:55

标签: git gerrit

我目前正在使用以下git diff命令来获取文件更改列表,我想要排除某些文件夹(比如datafiles)和文件(.DSstore),如果有的话,任何指针这样做的方法?

git diff --no-index /Users/USERNAME/Documents/FWintegration/ingo2/ukon_4355c1 /Users/USERNAME/Documents/FWintegration/ingo2mirror/ingo2mirror

2 个答案:

答案 0 :(得分:2)

git diff -- ':!unwantedpath'

例如,git diff -- ':!foo/bar/datafiles' ':!*.DSstore'

但它是一个相对较新的功能,因此只有在使用新版本的Git时它才有效。我不记得它是在哪个版本中引入的,但它是在2.10.0之后的某个版本。

答案 1 :(得分:1)

好的......我的第三个答案。不幸的是,这个大多数很复杂,但实际上它适用于--no-index

git diff | awk '{if (/^diff --git/) {if (/d1\/\S*$/){display=0}else{display=1}};if (display==1) {print}}'

每个文件diff git diff都以" diff --git"开头。所以...我们有awk寻找那条线。如果它找到它,然后不喜欢它,它会停止打印,直到找到它喜欢的差异。

所以,你修改的awk语句的唯一部分是if (/d1\/\S*$/)这就是它过滤的方式......如果这个正则表达式匹配,它会忽略这个差异 - 不打印它)。这会过滤掉" d1 /"后面跟着任意数量的非空格字符,直到行尾(所以它只查看第二个文件名而不是第一个。)对于你的例子,你是' d想要if:

if (/datafiles\/\S*$/ || /\.DSstore$/)

编辑: 如果这对你来说太疯狂了,而且没有人提供更好的解决方案,我强烈建议退房" Beyond Compare"这是一个疯狂的功能强大的目录/文件比较工具,具有良好的用户界面。