更新:

更新:

使用时git diff,如何忽略以 开头的更改#?对于普通diff命令,我会使用类似的命令:

diff <(grep -v '^#' file1) <(grep -v '^#' file2)

但下面建议的解决方案都不起作用!

git diff省略注释真的就没有办法看了吗?

更新:

我在我的.gitconfig

[pager]
    cdiff = diff-highlight

[alias] 
    cdiff = "diff -w --ignore-blank-lines -I'^#'"

当我这样做时git cdiff,我收到此错误:

error: invalid option: -I^#

更新2:

这太令人沮丧了。该语法git diff -G'^[^#]'不能可靠地工作。例子:

$ cat 1.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj

初始化新的 git 存储库:

$ git init && git add . && git commit -m "initial commit" -a

仅在文件顶部添加注释:

$ cat 1.txt
# comment
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj

到目前为止,它按预期工作。git diff -G'^[^#]'不将评论显示为更改。但是,如果我在最后一行添加真正的更改,然后git diff -G'^[^#]'再次执行,它就会显示添加的最后一行(应该如此),而且还会显示之前未显示的第一行注释。

所以基本上,只要我添加任何非注释更改,git 就会显示所有内容,甚至注释。

答案1

可以通过在diffing 之前过滤所有文件来实现此目的。

首先,编写一个小助手,并调用它stripcomments(可执行文件,位于您的某处PATH):

#!/bin/sh -
exec grep -ve '^#' -- "$@"

git diff然后使用此帮助程序配置模式:

git config diff.nocomments.textconv stripcomments

(这将配置当前存储库)。

最后,设置 git 属性以在所有文件上使用此帮助器:

echo '* diff=nocomments' >> .gitattributes

(在存储库的顶级目录中)。

git diff现在将忽略任何以 开头的行#。请注意,这将影响行编号。

如果您希望将此作为别名,而不是覆盖 的所有使用git diff,请跳过git config上面的命令并按如下方式创建别名:

git config alias.cdiff '-c diff.nocomments.textconv=stripcomments diff'

现在将在删除注释的情况下git cdiff运行。git diff#

您可以通过在( ) 而不是中使用git config --global和存储属性来全局配置所有这些,而不是针对每个存储库。$XDG_CONFIG_HOME/git/attributes~/.config/git/attributes.gitattributes

man gitattributesman git-config了解详情。

答案2

也许你想做一个git diff 与正则表达式cdiff并在 git 配置中为该命令添加别名。

git diff -w -G'^[^#]'

~/.gitconfig然后为该命令添加一个别名

[alias]
    cdiff = "diff -w -G'^[^#]'"

不确定这是否符合您的预期目的,因此请根据需要进行调整。

答案3

全部通过一个例子:

mkdir cdiff && cd cdiff
git init
cat text.txt
# first comment
1
2
# midle comment
3

4
# last comment
git add test.txt
git commit -m 'first'

现在让我们在工作目录中更改它:

cat test.txt
1

2
# first comment
# last comment
4
bye

创建一个实用程序:

cat /usr/local/bin/git-cdiff
#!/bin/sh
diff --color -u <(grep -Ev '^(#|$)' $1) <(git show $2:$1 | grep -Ev '^(#|$)')
chmod 555 /usr/local/bin/git-cdiff

将特定提交中的同一文件与工作目录中的文件进行比较:

git cdiff test.txt HEAD

或者:

git cdiff test.txt <hash commit>
git cdiff test.txt a4ec1
--- /dev/fd/63  2021-07-09 08:09:48.581153921 +0300
+++ /dev/fd/62  2021-07-09 08:09:48.581153921 +0300
@@ -1,4 +1,4 @@
 1
 2
+3
 4
-bye

相关内容