Как применить патчи к вершине дерева мерзавцев, предотвращая дублирование? - PullRequest
2 голосов
/ 29 июля 2010

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

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

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

From b1af4315d823a2b6659c5b14bc17f7bc61878ef4 (timestamp)

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

git show b1af4315d823a2b6659c5b14bc17f7bc61878ef4

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

Я пытался использовать такие вещи, как git apply или git 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», если нет, и просто пропускает патч, если он есть?

Спасибо.

1 Ответ

3 голосов
/ 29 июля 2010

Вы можете создать новую ветку версии, для которой были сделаны исправления, затем применить их и объединить временную ветку с master:

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

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

Это не самый элегантный способ, но стоит сделать свое дело.

...