2010-07-29 6 views
2

Я ищу совет для проблемы, которая, как я думал, была простой, и может быть просто, создав небольшой скрипт, но я думаю, что уже существует способ сделать это с помощью git/quilt/stgit.Как применить патчи на вершине дерева git, предотвращающего дублирование?

Я не очень хорошо разбираюсь в git, и это вызывает некоторые проблемы для меня.

Моя проблема: У меня есть дерево git (ядро linux) и несколько патчей. Что происходит, такие патчи были предназначены для и более ранней версии ядра, и многие из них уже были применены к моему дереву. Пластыри начинаются с строкой заголовка, как

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp) 

и делать что-то вроде

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4 

в моем дереве ядра, я могу видеть, что они уже доступны в моем текущем дереве, и я не когда-либо пытались применить их.

Я пытался использовать вещи, как мерзавца применить или мерзавец я ​​, но они, кажется, попробуйте применить патч вообще:

[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, которая выполняет проверку, является ли patch уже применен к текущему дереву, и он делает «git apply», если это не так, и просто пропускает патч, если он есть?

Спасибо.

ответ

3

Вы можете создать новую ветвь версии, для которых были сделаны исправления, чем применять их и объединить ТЕМП-филиал в мастер:

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

Это должно решить большинство дублированных патчей (хотя, это не будет использовать идентификатор commit, а скорее содержимое патча). Кроме того, вы можете попробовать git rebase на последнем шаге.

Это не самый элегантный способ, но должен сделать трюк.

 Смежные вопросы

  • Нет связанных вопросов^_^