【问题标题】:How to remove comments and information lines from gif diff?如何从 gif diff 中删除评论和信息行?
【发布时间】:2019-07-17 21:55:09
【问题描述】:

当我发出如下命令时:

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>

如何摆脱这些行直到@@?我也尝试了--color-word 选项,但没有更改输出。

为了摆脱 C 文件中的 cmets,我做到了

git diff -G'(^[^\*# /])|(^#\w)|(^\s+[^\*#/])' -U10 C:\text1.c C:\text2.c 

在这里指定:How to make git diff ignore comments。但它不起作用。它不会删除输出上的任何 cmets。如何解决这两个问题?

【问题讨论】:

  • 您看到的不是 cmets,而是提到了哪些文件已被添加/删除。您确定想要显示此类信息吗?
  • @ObsidianAge 我只是想将 git diff 的结果保存在一个字符串中。该信息与我正在尝试做的事情无关:)
  • @ObsidianAge 另外,我正在尝试从 C 文件中删除 cmets。
  • 似乎您只想将输出通过管道传输到sed '/^diff/,/^@@/d'
  • @WilliamPursell 效果很好!是否有可能从带有git diff 的文件中删除 cmets 并在删除 cmets 后得到 -U10 行?

标签: git diff git-diff


【解决方案1】:

如果您对一对文件进行比较,第一行 @@ 总是紧跟第一行 +++ 之后,无论输出的标题部分是否为四行:

$ 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' 管道。

如果您知道这两种文件模式匹配(这样多余的行 old mode ...new mode ... 将不存在),您可以只删除前四行。

(除此之外:您的 git diff 只显示 三个 标题行似乎很奇怪。即使对于未存储在 Git 中的文件,index ... 行也应该出现。)

至于删除 cmets:Git 并不真正知道某事是否是评论。注释语法特定于源语言。例如,# 在 shell 和 Python 中标记 cmets,但 // 在 C++ 和 Go 中标记 cmets。 (比这更复杂,因为在各种语言中还有其他类型的 cmets,并且有块数据结构——例如 Python 中的三引号和 Go 中的反引号——这可能会使某些东西看起来像 评论,实际上不是评论。)因此,您需要为此发明自己的检测和删除方法。

【讨论】:

  • '/^diff/,/^@@/d' -> 这对 sed 很有效,因为它也摆脱了 @@ 行。对于语法,我只是想删除 C 编程 cmets。
  • 您说您想保留 @@ 行。至于删除 C cmets,如果整个 diff 部分在 /* 之后,而结尾的 */ 在 diff 块之后呢?
  • 那是我使用正则表达式 '(^[^\*# /])|(^#\w)|(^\s+[^\*#/])' 但它不起作用的地方。
  • 那个 RE 根本不匹配 /* 类型 cmets:它匹配不是反斜杠、*#、空格或 / 开头的东西行,或# 后跟在行首的单词字符,或空格后跟非反斜杠、*#/,都在行首(尽管细节取决于这是 Perl RE 还是 POSIX 基本或扩展 RE)。
猜你喜欢
  • 2011-12-18
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多