你如何获得差异中包含的文件列表?

问题描述 投票:4回答:4

我有一个包含git diff输出的补丁文件。我想得到根据补丁文件添加或修改的所有文件的摘要。我可以使用什么命令来实现这一目标?

diff patch
4个回答
14
投票

patchutils包括lsdiff实用程序。


2
投票

grep '+++' mydiff.patch似乎可以做到这一点。

我也可以使用git diff --names-only这可能是更好的方法。


1
投票
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'

0
投票

当你解析由git format-patch或其他包含有关编辑行数的附加信息的其他人生成的补丁时,搜索^+++(在行的开头)而不仅仅是+++是至关重要的。

例如:

grep '^+++' *.patch | sed -e 's#+++ [ab]/##'

将在开始时输出没有a/b/的路径。

© www.soinside.com 2019 - 2024. All rights reserved.