2

簡単だと思っていた問題についてアドバイスを求めています。小さなスクリプトを作成するだけで簡単かもしれませんが、git / quilt/stgitを使用してそれを行う方法はすでにあるはずです。

私はgitが得意ではなく、これが私にいくつかの問題を引き起こしています。

私の問題:gitツリー(Linuxカーネル)といくつかのパッチがあります。何が起こるか、そのようなパッチはカーネルの古いバージョンを対象としており、それらの多くはすでに私のツリーに適用されています。パッチは次のようなヘッダー行で始まります

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp)

そして次のようなことをすることによって

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4

私のカーネルツリーでは、それらが現在のツリーですでに利用可能であることがわかります。それらを適用してみたくありません。

gitapplygitamのようなものを使ってみましたが、パッチを適用しようとしているようです。

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」を実行し、適用されている場合はパッチをスキップするコマンド/ utilはありますか?

ありがとう。

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 に答える