Что такое патч в управлении версиями git?

Я новичок как для git, так и для управления версиями, поэтому я пытаюсь выяснить, что такое патч и как он отличается от остальных действий, которые я выполняю в git?

Когда я применяю патч? Это происходит каждый раз, когда я совершаю?

Ответ 1

В этом блоге вы можете увидеть, как вы можете создать патч (сбор изменений, которые вы хотите установить связь и применить к другому репо)

git patch

См. также Добавление Rails с Git в качестве другого конкретного примера.

В настоящее время запрос на перенос GitHub позволяет применять исправления в репозиториях GitHub, что полезно, если вы не являетесь прямым вкладчиком (т.е. вы не имеете права напрямую нажать на репо). На самом деле, довольно недавно GitHub представил "" Лучше отправить электронные письма", чтобы улучшить уведомление о новых исправлениях.

Ответ 2

Patch - это программа Unix, которая обновляет текстовые файлы в соответствии с инструкциями, содержащимися в отдельном файле, называемом файлом патча.

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

Теперь, что такое файл патча? Скажем, у вас есть текстовый файл с 2 строками:

This is line A.
This is line B, or otherwise #2.

Затем вы меняете первую строку, и теперь ваш файл выглядит следующим образом:

This is SPARTA.
This is line B, or otherwise #2.

Как бы вы описали изменение содержимого файла? Вы можете сказать, что первая строка "Это линия A." заменено на "Это SPARTA", или даже последнее слово "A" первой строки заменено другим словом "SPARTA". И это именно то, о чем говорит diff. Скажем, у меня есть две версии этого файла, одна называется file1.txt и еще одна file2.txt, затем я запускаю diff и получаю следующее:

$ diff -u file1.txt file2.txt 
--- file1.txt   2011-11-26 11:07:03.131010360 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.

Имея описание изменений, вы можете применить его к исходному контенту и получить измененный контент. И эти изменения, введенные в унифицированный формат, которые могут распознать "патч-подобные" программы, называются файлами исправлений. Как будто вместо того, чтобы добывать рыбу у кого-то, они учат вас, как ловить рыбу, чтобы вы сами выкопали эту рыбу из воды. Теперь применим наш патч к файлу file1.txt, чтобы он выглядел точно так же, как file2.txt:

$ cat file1.txt 
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch 
--- file1.txt   2011-11-26 11:09:38.651010370 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.
$ patch < changes.patch 
patching file file1.txt
$ cat file1.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ 

Вы можете подумать, что проще просто иметь две версии этого файла. Ну, в этом простом случае это правда. Но когда у вас много файлов, и эти файлы очень большие, гораздо эффективнее иметь несколько строк изменений, а не две копии всего.

Говоря в терминах git, файл патча по-прежнему означает одно и то же, но использование diff + patch было бы кошмаром. Например, вам всегда нужно иметь две версии файла (или даже весь репозиторий), чтобы сравнить их. Не звучит так хорошо, не так ли? Таким образом, git выполняет всю тяжелую работу для вас - он сравнивает ваш локальный файл с тем, что есть в репозитории, с которым вы работаете, и можете показать его вам как "diff" или применить этот "diff", как патч aka совершить ваши изменения, или даже позволить вам применить некоторые файлы исправлений, которые у вас уже есть. Не углубляясь в детали, в этом смысле git абсолютно то же самое, что и другие системы управления версиями, такие как SVN или даже CVS или perforce.

Надеюсь, что это поможет!

Ответ 3

Патч - это небольшой файл, который указывает, что было изменено в репозитории. Он обычно используется, когда кто-то из вашей команды имеет доступ только для чтения, но имеет хорошее изменение кода. Затем он создает патч и отправляет его вам. Вы применяете его и вставляете в репозиторий git. Затем все извлекают выгоду из обновленной версии, а автору патча не нужен доступ для чтения/записи.

На самом деле это в основном вещь безопасности (по крайней мере, то, что люди используют для нее).

Ответ 4

Патч - это набор различий между одним или несколькими файлами, чтобы показать, что между ними отличается. Обычно вы генерируете только патч, чтобы показать кому-то, что вы изменили. Примером того, когда вы можете это сделать, является обнаружение и исправление ошибки в приложении с открытым исходным кодом, а затем публикация исправления в их отслеживателе ошибок.

Ответ 5

Патч файл представляет собой один набор изменений, которые могут быть применены к любой ветки в любом порядке. Используя патч, вы получите различия между одним или несколькими файлами. И позже вы можете применить различия (патч), чтобы получить изменения в новых файлах. Существует много применений для патча в Git. Если у вас есть незафиксированные изменения в вашем рабочем каталоге, и вам нужно, чтобы эти изменения применялись в другом месте, просто создайте патч и примените исправление.

git diff > mypatch.patch

Если у вас есть новые файлы в вашем репозитории (без следа), вы должны создать файл перед созданием патча (не совершать) и использовать следующую команду

git diff --cached > mypatch.patch 

Впоследствии вы можете применить исправление:

git apply mypatch.patch

Если вы хотите внести некоторые изменения в репозиторий git, у которого нет разрешения на запись, просто внесите изменения и создайте патч между ними и отправьте патч кому-то, у кого есть разрешение на применение патч, этим ваши изменения должны быть добавлены в этот репозиторий git.