Как патчи работают в Git?
Я новичок в Git, но знаком с SVN. В качестве теста я создал репозиторий в локальном каталоге с git init
. Затем я клонировал пустой репозиторий (через SSH, используя 127.0.0.1, а это еще одна вещь, которую я хотел протестировать) в другой локальный каталог. Я добавил несколько файлов в репозиторий 2, я сделал git add *
и, наконец, git commit -a -m "First source code"
.
Теперь я хочу создать патч с помощью git format-patch
и применить его в репозитории 1. Как мне это сделать? Я знаю, что есть руководство, но эти вещи ужасно сложны и заставляют меня делать определенные вещи на моем мониторе.
Ответы
Ответ 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
Использование 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