2010-07-29 35 views
2

我正在为一个我认为很简单的问题寻求建议,通过创建一个小脚本可能确实很简单,但我认为应该已经有一种方法可以用git/quilt/stgit来实现这一点。如何在git树的顶部应用补丁以防止重复?

我并不完全擅长git,这对我造成了一些问题。我的问题: 我有一个git树(linux内核)和一些补丁。会发生什么,这些补丁是针对内核的旧版本的,其中许多补丁已经应用到我的树上。这些补丁开始的标题行像

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp) 

,并在我的内核树做这样的事情

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4 

,我可以看到他们在我目前的树已经上市,我不曾经想尝试应用它们。

我试图使用像混帐东西应用git的是,但他们似乎尝试任何应用补丁:

[email protected]:~/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”,并且只要跳过修补程序(如果它有)?

谢谢。

回答

3

您可以创建的版本,该补丁做了一个新的分支,比应用它们和临时分支合并到主:

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

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

这不是最优雅的方式,但应该做的伎俩。