... Есть ли какой-нибудь простой способ узнать, к какой версии патч следует применить?
Только если патч содержит строку index
. (Даже тогда, это не обязательно easy , и может быть много исправлений, к которым патч может применяться.) В этом случае у этого патча есть такая строка:
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index 91919ad..fed9e0c 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
@@ -37,6 +37,7 @@ if(CMAKE_COMPILER_IS_GNUCC)
[snip]
Строка index
в Git diff предоставляет старый и новый хэш-идентификаторы BLOB-объектов. Это означает, что версия CMakeLists.txt
, к которой применяется исправление, представляет собой большой двоичный объект, сокращенный идентификатор хэша которого равен 91919ad
. Если этот хэш-идентификатор не является каким-то конкретным конкретным BLOB-объектом, у него проблемы; клонируя хранилище, как сегодня, я нахожу:
$ git rev-parse 91919ad
91919adb4a289234062a27bed0276cb098d1e5d5
чтобы мы могли использовать ответы из Какой коммит имеет этот BLOB-объект?
Вместо необычного сценария на Perl я согласился с ответом VonC:
$ git log --oneline --find-object=91919adb4a289234062a27bed0276cb098d1e5d5
e0597baed57 Remove Carve boolean
e8daf2e3ea1 CMake: cleanup
Обратите внимание, что здесь можно использовать сокращенный хеш, поскольку он все еще уникален:
$ git log --oneline --find-object=91919ad
e0597baed57 Remove Carve boolean
e8daf2e3ea1 CMake: cleanup
Лучше хранить полный идентификатор хэша, хотя, в конце концов, сокращенный хэш может стать неуникальным, и будет служить только более длинный хэш. (Полный хеш будет работать всегда, так как нет ничего длиннее, чем полный хеш.)
Обратите внимание, что существует много коммитов "между" этими двумя:
$ git rev-list --count e8daf2e3ea1..e0597baed57
752
Все этих коммитов (кроме последнего) поделиться этой одной версией extern/CMakeLists.txt
:
$ git show e8daf2e3ea1 -- extern/CMakeLists.txt
commit e8daf2e3ea17c2e9569e6fc9b49879c74d9a8c22
Author: Campbell Barton [snip]
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index f7e98525b8b..91919adb4a2 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
[snip]
Этот коммит является началом 751 коммитов, которые содержат эту версию этого файла. В то же время:
$ git show e0597baed57 -- extern/CMakeLists.txt
commit e0597baed57fa7a9dfaf6dff6d0fa120784d21ea
Author: Sergey Sharybin [snip]
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index 91919adb4a2..2e8589ffd17 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
Это первый коммит, который останавливает , используя эту версию extern/CMakeLists.txt
(после чего никакая другая версия master-branch не использует его).