Как патчи работают в Мерзавце?

Я плохо знаком с Мерзавцем, но знаком с SVN. Как тест я сделал репозиторий в локальном каталоге с git init. Затем я клонировал пустой репозиторий (по SSH использование 127.0.0.1, который является другой вещью, которую я хотел протестировать) к другому локальному каталогу. Я добавил некоторые файлы в репозитории 2, я сделал git add * и наконец git commit -a -m "First source code".

Я теперь хочу создать использование патча git format-patch и примените его на репозиторий 1. Как я делаю это? Я знаю, что существует руководство, но эти вещи являются ужасно сложными и заставляют меня хотеть сделать определенные вещи к своему монитору.

29
задан Moacir Rosa 24 August 2012 в 23:40
поделиться

5 ответов

Создайте свой патч через:

$ git format-patch master --stdout > patch.diff

тогда patch.diff будет содержать diff, который вы можете отправить кому-нибудь другому для применения, используя:

$ git am < patch.diff

Иногда, когда руководства немного плотные, имеет смысл поискать учебное пособие:

http://luhman.org/blog/2009/09/22/git-patch-tutorial

23
ответ дан 28 November 2019 в 01:49
поделиться

Правильный и простой способ сделать это, если вы используете Git, - через удаленные устройства:

cd \path\to\repo1
git remote add otherrepo \path\to\repo2
git fetch otherrepo

git log otherrepo/master  ## Find the commit you want to steal in the list

git cherry-pick SOME_SHA1  ## Snag just one commit
git merge otherrepo/master  ## Merge all of the new commits from otherrepo/master

Это перенесет коммитов из одного репо в другой, включая их авторов и фиксировать сообщения и поможет вам разобраться в конфликтах слияний (особенно если вы перемещаетесь> 1 коммит)

2
ответ дан Ana Betts 28 November 2019 в 01:49
поделиться

Вам нужно перейти в «хранилище 2», из которого вы хотите создать патч, и запустить git-format-patch, чтобы создать патч: git format-patch master --stdout> name_of_patch_file

Затем вы переходите в «хранилище 1», к которому вы хотите применить патч: git apply name_of_patch_file

Иногда полезно просто проверить, не вызовет ли патч проблемы: git apply --check name_of_patch_file

0
ответ дан baraber 28 November 2019 в 01:49
поделиться

С Мерзавцем 2.25 (1 квартал 2020), git format-patch развивается для лучше использования описания ответвления (" git branch --edit-description") как предмет.

См. bf8e65b фиксации, a92331d фиксации, фиксация 46273df (15 октября 2019) [1 128] Denton Liu (Denton-L) .
<глоток> (Объединенный [1 129] Junio C Hamano - gitster -
в [1 130] b75ba9b фиксации, 10 ноября 2019)

format-patch : преподавайте --cover-from-description опция

<глоток> Signed-off-by: Denton Liu

Прежде, когда format-patch генерировал сопроводительное письмо, только тело, будет заполнен с описанием ответвления, в то время как предмет был бы заполнен с текстом заполнителя.

Однако пользователи могут хотеть иметь предмет своего сопроводительного письма, автоматически заполненного таким же образом.

Учат патч формата принимать --cover-from-description опция и соответствующий format.coverFromDescription конфигурация, позволяя пользователям заполнить различные части сопроводительного письма ( включая предмет теперь ).

git config документация теперь включает:

format.coverFromDescription:

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

И git format-patch :

--cover-from-description=<mode>:

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

  • , Если <mode> message или default, предмет сопроводительного письма будет заполнен с текстом заполнителя.
    тело сопроводительного письма будет заполнено с описанием ответвления. Это - режим по умолчанию, когда никакая конфигурация, ни параметр командной строки не указаны.

  • , Если <mode> subject, первый абзац описания ответвления заполнит предмет сопроводительного письма.
    остаток от описания заполнит тело сопроводительного письма.

  • , Если <mode> будет auto, если первый абзац описания ответвления будет больше, чем 100 байтов, то режим будет message, иначе subject, будет использоваться.

  • , Если <mode> none, и предмет сопроводительного письма и тело будут заполнены с текстом заполнителя.

0
ответ дан 28 November 2019 в 01:49
поделиться

Самый простой способ создания патчей из последнего коммитата (или последних нескольких коммитов) является использование Format-Patch с отрицательным числом, указывающим количество коммитителей для создания патчей для:

git format-patch -1

Получу патч-файл с именем после описания фиксации. Использование AM , чтобы вставить его в другой репозиторий:

git am << name_of_patch_file
14
ответ дан 28 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: