如何在 git 树的顶部应用补丁以防止重复?
我正在为一个我认为很简单的问题寻求建议,并且通过创建一个小脚本确实可能很简单,但我认为应该已经有一种方法可以使用 git/quilt/stgit 来做到这一点。
我不太擅长 git,这给我带来了一些问题。
我的问题: 我有一个 git 树(linux 内核)和一些补丁。发生了什么,这些补丁是针对旧版本的内核的,其中许多已经应用到我的树上。这些补丁以标题行开头
From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp)
,通过在我的内核树中执行类似的操作
git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4
,我可以看到它们已经在我当前的树中可用,并且我不想尝试应用它们。
我尝试使用 git apply 或 git am 之类的东西,但他们似乎尝试应用补丁:
alan@ubuntu:~/Desktop/openwrt/linux-git/linux-2.6.33.y$ git apply -p1 --check --index /home/alan/Desktop/openwrt/svn/backfire-branch/build_dir/linux-kirkwood/linux- 2.6.30.10/patches/generic/000-bzip_lzma_remove_nasty_hack.patch
error: patch failed: lib/decompress_bunzip2.c:45
error: lib/decompress_bunzip2.c: patch does not apply
error: patch failed: lib/decompress_unlzma.c:29
error: lib/decompress_unlzma.c: patch does not apply
那么:是否有任何命令/util 执行检查是否有补丁已经应用于当前树,如果没有,它会执行“git apply”,如果有,则跳过补丁?
谢谢。
I'm seeking advice for a problem that I thought to be simple, and it might be simple indeed by creating a small script, but I think there should already be a way to do that with git/quilt/stgit.
I'm not exactly good at git and this is causing some issues to me.
My problem:
I've got a git tree (linux kernel) and a number of patches. What happens, such patches were intended for and older version of the kernel, and many of them have already been applied to my tree. The patches start with an header line like
From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp)
and by doing something like
git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4
in my kernel tree, I can see they're already available in my current tree, and I don't ever want to try applying them.
I tried using things like git apply or git am , but they seem to try applying the patch whatsoever:
alan@ubuntu:~/Desktop/openwrt/linux-git/linux-2.6.33.y$ git apply -p1 --check --index /home/alan/Desktop/openwrt/svn/backfire-branch/build_dir/linux-kirkwood/linux- 2.6.30.10/patches/generic/000-bzip_lzma_remove_nasty_hack.patch
error: patch failed: lib/decompress_bunzip2.c:45
error: lib/decompress_bunzip2.c: patch does not apply
error: patch failed: lib/decompress_unlzma.c:29
error: lib/decompress_unlzma.c: patch does not apply
So: is there any command/util that performs a check whether a patch has already been applied on the current tree, and it does a "git apply" if it hasn't, and just skips the patch if it has?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以创建一个版本的新分支,为其制作补丁,然后应用它们并将临时分支合并到主版本中:
这应该解决大多数重复的补丁(尽管,它不会使用提交 ID,而是使用补丁内容)。另外,您可以在最后一步中尝试 git rebase 。
这不是最优雅的方式,但应该可以解决问题。
You can create a new branch of the version, for which the patches were made, than apply them and merge the temp-branch into master:
This should resolve most duplicated patches (although, it won't use the commit id, but rather patch contents). Also, you could try
git rebase
in the last step.It's not the most elegant way, but should do the trick.