![更新:](https://linux22.com/image/192539/%E6%9B%B4%E6%96%B0%EF%BC%9A.png)
使用时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
可以通过在diff
ing 之前过滤所有文件来实现此目的。
首先,编写一个小助手,并调用它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
答案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