Подтвердить что ты не робот

Как патчи работают в Git?

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

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

4b9b3361

Ответ 1

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

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

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

$ git am < patch.diff

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

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

Ответ 2

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

git format-patch -1

Вы получите файл патча, названный после описания фиксации. Использование am для вставки его в другой репозиторий:

git am << name_of_patch_file

Ответ 3

Использование патча GitHub

  • Добавьте .patch к URL-адресу фиксации, чтобы получить файл патча, пример

    github.com/git/git/commit/b6b3b6a.patch

  • Исправить исходный файл следующим образом:

    git am /tmp/b6b3b6a.patch
    

Использование GitHub diff

  • Добавьте .diff в URL-адрес фиксации, чтобы получить файл исправления, например

    github.com/git/git/commit/b6b3b6a.diff

  • Исправить исходный файл следующим образом:

    git apply -p0 /tmp/b6b3b6a.diff
    

& sect; 5.3 Распределенный Git - Поддержание проекта

Ответ 4

Правильный и простой способ сделать это, если вы используете 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 фиксация)

Ответ 5

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

Затем вы заходите в "репозиторий 1", тот, который вы хотите применить к патчу: git применить name_of_patch_file

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