我有一个包含git diff
输出的补丁文件。我想得到根据补丁文件添加或修改的所有文件的摘要。我可以用什么命令来实现这个目标?
答案 0 :(得分:14)
patchutils
包含lsdiff
实用程序。
答案 1 :(得分:2)
grep '+++' mydiff.patch
似乎可以解决问题。
我也可以使用git diff --names-only
这可能是更好的方法。
答案 2 :(得分:1)
grep '+++' mydiff.patch|perl -pe 's/\+\+\+ //g'
详细说明:
git diff以
格式生成输出+++ b/file
所以,如果你使用grep作为Nathan建议
grep '+++' mydiff.patch
您将拥有受影响文件的列表,前缀为'+++'(3个加号和空格)。
我经常需要进一步处理文件,并且发现每行有一个文件名很方便,没有别的。这可以通过以下命令实现,其中perl / regex删除这些加号和空格。
grep '+++' mydiff.patch|perl -pe 's/\+\+\+ //g'
对于使用diff -Naur生成的补丁文件,mydiff.patch文件包含带有文件名和日期的条目(表示制表符空白字符)
+++ b/file<tab>2013-07-03 13:58:45.000000000 +0200
要为此提取文件名,请使用
grep '+++' mydiff.patch|perl -pe 's/\+\+\+ (.*)\t.*/\1/g'
答案 3 :(得分:0)
当您解析由git format-patch
或其他包含有关已编辑行数的其他信息的补丁时,至关重要的是搜索^+++
(在行的开头),而不仅仅是+++
例如:
grep '^+++' *.patch | sed -e 's#+++ [ab]/##'
将在开始时输出不包含a/
或b/
的路径。
答案 4 :(得分:0)
一种不错的方法是使用--stat标志(或–summary标志,如果出于某种原因仅需要新的/删除的/重命名的文件)。
示例:
git apply --stat peer.diff | awk '{ print $1 }' | sed '$d'
1-js/03-code-quality/index.md
CONTR.md
LICENSE.md
README.md
chat-app.readme.md