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

use*_*248 6 git gerrit

我当前正在使用以下 Git diff 命令来获取文件更改列表。我想排除某些文件夹(例如datafiles)和文件(.DSstore)。有没有办法做到这一点?

git diff --no-index /Users/USERNAME/Documents/FWintegration/ingo2/ukon_4355c1 /Users/USERNAME/Documents/FWintegration/ingo2mirror/ingo2mirror
Run Code Online (Sandbox Code Playgroud)

zzx*_*xyz 3

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

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

每个文件 diffgit diff执行都以“diff --git”开头。所以...我们用 awk 查找该行。如果它找到它,然后不喜欢它,它会停止打印,直到找到它喜欢的 diff --git 。

因此,您修改的 awk 语句的唯一部分是if (/d1\/\S*$/) 这就是它的过滤方式...如果此正则表达式匹配,它将忽略此差异 - 不打印它)。这会过滤掉“d1/”后跟任意数量的非空白字符,直到行尾(因此它只查看第二个文件名,而不是第一个文件名。)对于您的示例,您希望 if 为:

if (/datafiles\/\S*$/ || /\.DSstore$/)
Run Code Online (Sandbox Code Playgroud)

编辑:如果这对您来说太疯狂,并且没有人提供更好的解决方案,我强烈建议您查看“Beyond Compare”,这是一个非常强大的目录/文件比较工具,具有漂亮的用户界面。