2016-10-22 35 views
1

我有一个项目中的更改日志文本文件。我想从两个标签之间的文件中获得更改列表。我制备此命令:如何使用git diff找到添加的行(未更改)?

git diff tag1..tag2 file | grep -v -e "+++ b/file" -e "@@" | grep "+" 

作为输出I接收标记为添加(与+开始)的所有行。但是他们之间可能存在一些早些时候存在的线条,但是在所提及的标签之间进行了修改(例如纠正拼写错误)。是否有任何选项只允许过滤新行或仅修改行?或者,也许有任何选项可以控制输出中打印行修改的百分比条件?

+0

据我所知,git将行标记为已删除的旧行并将其添加为新行。没有“改变”线指示器。虽然,你可以看到哪些删除和添加的行在同一行号上。 – Imaginaroom

+0

听起来很棘手。对于在文件中移动但未更改的行,您希望发生什么? – melpomene

+0

该行将在文件中的不同位置,所以我会将它们视为新行。 – Yama

回答

0

不幸的是我找不到任何令人满意的答案(这里也没有其他地方),所以我不得不自己编写必要的脚本。

0

Git本身并没有这样做,如果你关心语义而不是简单的语法,它总的来说是一个难题。不过,Git会附带一个名为diff-highlight的后期处理过滤器。这个Perl脚本中的代码可以进行你感兴趣的语法分析,所以可以修改它来产生你想要的。

请参阅https://github.com/git/git/tree/master/contrib/diff-highlight来源diff diff-highlight。阅读README以查看他们关于这种分析涉及的语义问题的笔记。请注意,as of Git version 2.9,突出显示脚本与Git的其余部分一起安装,因此您不必将其从贡献源区域中捞出。

相关问题