2

我正在为一个我认为很简单的问题寻求建议,通过创建一个小脚本可能确实很简单,但我认为应该已经有一种方法可以用 git/quilt/stgit 做到这一点。

我不太擅长 git,这给我带来了一些问题。

我的问题:我有一个 git 树(linux 内核)和一些补丁。会发生什么,这些补丁是为旧版本的内核设计的,其中许多已经应用到我的树上。补丁以标题行开头,例如

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp)

并通过做类似的事情

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4

在我的内核树中,我可以看到它们已经在我当前的树中可用,我不想尝试应用它们。

我尝试使用git applygit 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

那么:是否有任何命令/实用程序可以检查是否已在当前树上应用了补丁,如果没有,它会执行“git apply”,如果有则跳过补丁?

谢谢。

4

1 回答 1

3

您可以创建为其制作补丁的版本的新分支,然后应用它们并将临时分支合并到主分支:

git checkout -b temp-branch v2.6.30
git apply/am ...patches...
git checkout master
git merge temp-branch

这应该可以解决大多数重复的补丁(尽管它不会使用提交 ID,而是使用补丁内容)。git rebase另外,您可以在最后一步尝试。

这不是最优雅的方式,但应该可以解决问题。

于 2010-07-29T19:01:07.077 回答