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

问题描述 投票:0回答:2

我当前正在使用以下 Git diff 命令来获取文件更改列表。我想排除某些文件夹(例如

datafiles
)和文件(
.DSstore
)。有办法做到这一点吗?

git diff --no-index /Users/USERNAME/Documents/FWintegration/ingo2/ukon_4355c1 /Users/USERNAME/Documents/FWintegration/ingo2mirror/ingo2mirror
git gerrit
2个回答
3
投票

好吧...我的第三个答案。不幸的是,这个是复杂的,但它实际上可以与

--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 查找该行。如果它找到它,然后不喜欢它,它会停止打印,直到找到它喜欢的 diff --git。

因此,您修改的 awk 语句的唯一部分是

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

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

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


3
投票
git diff -- ':!unwantedpath'

例如,

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

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

© www.soinside.com 2019 - 2024. All rights reserved.