我收到了上下文差异格式的补丁,我需要在Git中应用它。据我所知,Git只能应用统一差异格式的补丁。
有没有办法将上下文差异转换为统一的diff格式,以便我可以git apply
修改补丁?
答案 0 :(得分:1)
由于git diff
只能配置为produce a context diff(或filtered to produce one),因此可能的简单方法是使用patch
手动应用上下文差异,然后使用git add
来检测更改。
答案 1 :(得分:1)
这是我最近在寻找同一问题的解决方案时找到的解决方案。 使用quilt:
dev-util/quilt-0.65::gentoo was built with the following:
USE="-emacs -graphviz" ABI_X86="(64)"
来自gentoo,以及下面的命令行会话,我能够无痛地进行 将上下文差异转换为统一差异,并将条带级别(补丁中的-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
希望这有帮助!