2010-07-29 31 views
2

Je suis à la recherche de conseils pour un problème que je pensais être simple, et qui pourrait être simple en créant un petit script, mais je pense qu'il devrait déjà y avoir un moyen de le faire avec git/quilt/stgit.Comment appliquer des patches sur le dessus d'un arbre git pour éviter la duplication?

Je ne suis pas vraiment bon à git et cela me cause quelques problèmes.

Mon problème: J'ai un arbre git (noyau Linux) et un certain nombre de correctifs. Que se passe-t-il, de tels correctifs étaient destinés à une version plus ancienne du noyau, et beaucoup d'entre eux ont déjà été appliqués à mon arbre. Les patchs commencent par une ligne d'en-tête comme

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp) 

et en faisant quelque chose comme

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4 

dans mon arbre du noyau, je peux voir qu'ils sont déjà disponibles dans mon arbre actuel, et je ne jamais envie d'essayer de les appliquer.

J'ai essayé d'utiliser des choses comme git appliquent ou git am, mais ils semblent essayer d'appliquer le patch que ce soit:

[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 

Alors: est-il une commande/util qui effectue un contrôle si un patch a déjà été appliqué sur l'arbre courant, et il fait un "git apply" si ce n'est pas le cas, et saute juste le patch si c'est le cas?

Merci.

Répondre

3

Vous pouvez créer une nouvelle branche de la version, pour laquelle les correctifs ont été faites, que de les appliquer et de fusionner la température-branche en maître:

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

Cela devrait résoudre les correctifs les plus dupliqués (bien, il n'utilisera pas l'identifiant de validation, mais plutôt son contenu). En outre, vous pouvez essayer git rebase dans la dernière étape.

Ce n'est pas la manière la plus élégante, mais devrait faire l'affaire.