Git: генерировать один патч за несколько коммитов - PullRequest
0 голосов
/ 19 октября 2018

Это ситуация:

  1. Мы создали «частное» репо (скажем, наше-репо), основанное на существующем git-репо с открытым исходным кодом (скажем, исходное репо).

  2. Мы занимались разработкой кода, и в нашем репо имеется около 20 слияний.Итак, репо перешло из «State_Initial» в «State_Current».

Теперь по деловым причинам мы хотим передать всю нашу разработку третьей стороне.Исходя из некоторых юридических вопросов, единственный вариант - мы даем им «единственный» файл патча со всеми нашими изменениями.Это сжатый патч между «State_Initial» и «State_Current».

Я огляделся и обнаружил

git format-patch -X

Но он генерирует «n» .patch файлов.

Есть ли способ создать один файл патча, чтобы, если мы создадим репо на основе «source-repo» и применим патч, это приведет нас к «State_Current»?

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Следующая команда создает один .patch файл, содержащий несколько коммитов.

git format-patch cc1dde0dd^..6de6d4b06 --stdout > foo.patch

Затем вы можете применить его следующим образом:

cat foo.patch | git am

Примечание: Обязательно используйте ^.. вместо .., если хотите включить SHA первого коммита.

0 голосов
/ 19 октября 2018

git format-patch может принимать диапазон ревизии в качестве аргумента.См. git help format-patch:

SYNOPSIS

git format-patch [-k] [(-o|--output-directory) <dir> | --stdout]
                   ... (many flags omitted)
                   [--progress]
                   [<common diff options>]
                   [ <since> | <revision range> ] 

ОПИСАНИЕ

Существует два способа указать, какие коммиты будут работать.

  1. Один коммит, <since>, указывает, что коммиты, ведущие к концу текущей ветви, которых нет в истории, приводят к выводу <since>.

  2. Общее <revision range> выражение (см. Раздел «УКАЗАНИЕ ПЕРЕСМОТРОВ» в gitrevisions (7)) означает коммиты в указанном диапазоне.

Например, следующая команда генерирует патч для трех последних коммитов в текущей ветви:

git format-patch HEAD~3..HEAD
...