我有一个包含git diff
输出的补丁文件。我想得到根据补丁文件添加或修改的所有文件的摘要。我可以使用什么命令来实现这一目标?
patchutils
包括lsdiff
实用程序。
grep '+++' mydiff.patch
似乎可以做到这一点。
我也可以使用git diff --names-only
这可能是更好的方法。
grep '+++' mydiff.patch|perl -pe 's/\+\+\+ //g'
细节:
git diff以格式生成输出
+++ b/file
所以,如果你像Nathan建议的那样使用grep
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'
当你解析由git format-patch
或其他包含有关编辑行数的附加信息的其他人生成的补丁时,搜索^+++
(在行的开头)而不仅仅是+++
是至关重要的。
例如:
grep '^+++' *.patch | sed -e 's#+++ [ab]/##'
将在开始时输出没有a/
或b/
的路径。