将上下文差异转换为统一差异格式

5

我收到了一个上下文差异格式的补丁,需要在Git中应用它。据我所知,Git只能应用统一差异格式的补丁。

有没有办法将上下文差异转换为统一差异格式,以便我可以git apply修改后的补丁?

2个回答

3

我最近在寻找解决同样问题的方案时,发现了以下的解决方案。使用quilt

dev-util/quilt-0.65::gentoo was built with the following:
USE="-emacs -graphviz" ABI_X86="(64)"

从 gentoo 开始,通过以下命令行会话,我能够轻松地将上下文差异转换为统一的差异,并将修剪级别(在 patch 中选项 -p)从 -p0 调整为 -p1(总是使用 -p1 吧,这将使你和其他人的生活更加轻松!)

$ tar xf SDL2-2.0.8.tar.gz
$ cd SDL2-2.0.8
$ quilt new SDL2-2.0.8.unified.patch
$ quilt --quiltrc - fold -p 0 < ../SDL2-2.0.8.context.patch # arbitrary -p0 context diff I created for this exercise
$ quilt refresh
# your new -p1 unified diff can be found at SDL2-2.0.8/patches/SDL2-2.0.8.unified.patch

作为谷歌搜索结果中与将上下文差异转换为统一差异相关的查询最高的之一,我在此回答。

应该适用于任何发行版,我只是为了记录而报告我的实际情况。

刚刚找到了一种“更好”的方法,但需要自己进行某种准备工作。对于这个方法,您只需要补丁文件本身。 您将需要 patchutils.

dev-util/patchutils-0.3.4::gentoo was built with the following:
USE="-test" ABI_X86="(64)"

$ $EDITOR SDL2-2.0.8.context.patch
# remove all lines like: 1   diff -cr SDL2-2.0.8/src/SDL.c SDL2-2.0.8.new/src/SDL.c (apparently not needed in current git)
# save and quit
$ filterdiff --format=unified < SDL2-2.0.8.context.patch > SDL2-2.0.8.unified.patch
# you can even do this inside vim with
:%!filterdiff --format=unified

希望这能帮到你!

1

感谢您提供的一般方法。我认为链接的答案不适用于此处,因为它展示了如何生成而不是如何应用上下文差异? - Alex Harvey
@AlexHarvey 没错。我已经重新表述了答案,只保留了一般的方法,这个方法足够简单。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接