Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何从gif diff中删除注释和信息行?_Git_Diff_Git Diff - Fatal编程技术网

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中标记注释,但是 //< /Cord>标记C++中的注释并转到。(比这更复杂,因为在各种语言中还有其他类型的注释,例如Python中有块数据结构三重引号,Go中有反勾号,这可能使某些东西看起来像注释,而实际上不是注释。)因此,您需要发明自己的检测和删除功能。

您看到的不是评论,而是提及添加/删除了哪些文件。你肯定想显示这样的信息吗?@obsidiange我只是想把git diff的结果保存在一个字符串中。这些信息与我试图做的事情无关:)@ObsidManager另外,我正在尝试从C文件中删除注释。似乎您只想通过管道将输出传输到
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