Git 如何从gif diff中删除注释和信息行?
当我发出如下命令时:Git 如何从gif diff中删除注释和信息行?,git,diff,git-diff,Git,Diff,Git Diff,当我发出如下命令时: git diff -U10 C:\text1.c C:\text2.c 我通过以下方式获得输出: diff --git "a/C:\text1.c" "b/C:\text2.c" --- "a/C:\text1.c" +++ "a/C:\text2.c" @@ -345,31 +456,32 @@ <content of the files> 如此处所述:。但它不起作用。它不会删除输出上的任何注释。如何解决这两个问题 如果要区分一对文件,无论输出的标题部分
git diff -U10 C:\text1.c C:\text2.c
我通过以下方式获得输出:
diff --git "a/C:\text1.c" "b/C:\text2.c"
--- "a/C:\text1.c"
+++ "a/C:\text2.c"
@@ -345,31 +456,32 @@ <content of the files>
如此处所述:。但它不起作用。它不会删除输出上的任何注释。如何解决这两个问题 如果要区分一对文件,无论输出的标题部分是否为四行,第一行始终紧跟在第一行之后:
$ git diff -U10 /tmp/[12]
diff --git a/tmp/1 b/tmp/2
index e4fbac4..624d841 100644
--- a/tmp/1
+++ b/tmp/2
@@ -1,2 +1,2 @@
this is file
-one
+two
或更多:
$ chmod +x /tmp/2
$ git diff -U10 /tmp/[12]
diff --git a/tmp/1 b/tmp/2
old mode 100644
new mode 100755
index e4fbac4..624d841
--- a/tmp/1
+++ b/tmp/2
@@ -1,2 +1,2 @@
this is file
-one
+two
因此,如果您确实有sed
,只需通过sed'1、/^++/d'
如果您知道这两种文件模式匹配(这样就不存在额外的行<代码>旧模式…和<代码>新模式…),您可以只删除前四行
(旁白:您的git diff
只显示了三行标题行,这似乎很奇怪。index…
行即使对于未存储在git中的文件也应该显示。)
至于删除注释:Git并不真正知道某个东西是否是注释。注释语法特定于源语言。例如,<代码> > <>代码>在shell和Python中标记注释,但是
sed'/^diff/,/^@@@d'
@williampersell效果很好!是否可以从带有git diff
的文件中删除注释,并在删除注释后获得-U10
行?'/^diff/,/^@@@d'
->这对sed很有效,因为它也可以从@行中删除注释。对于语法,我只是想删除C编程注释。您说过要保留@
行。至于删除C注释,如果整个diff部分位于diff块之后,而结束的*/
位于diff块之后呢?这就是我使用regex'(^[^\*.\\\\\\\\\\\\\\\\\\\\\\\\/])(^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
类型注释:它匹配的不是反斜杠,*
,\
,行首空格或/
,或\
在行首后跟单词字符,或空格后跟非反斜杠的内容,*
,\
,或
,都在行首(尽管细节取决于这是Perl RE还是POSIX basic或扩展RE)。
$ chmod +x /tmp/2
$ git diff -U10 /tmp/[12]
diff --git a/tmp/1 b/tmp/2
old mode 100644
new mode 100755
index e4fbac4..624d841
--- a/tmp/1
+++ b/tmp/2
@@ -1,2 +1,2 @@
this is file
-one
+two