Patch - это программа Unix, которая обновляет текстовые файлы в соответствии с инструкциями, содержащимися в отдельном файле, называемом файлом исправления.
Таким образом, другими словами, это может означать файл с инструкциями или программу, которая обрабатывает этот файл и применяет его к чему-либо.
Теперь, что такое файл патча? Допустим, у вас есть текстовый файл с 2 строками:
This is line A.
This is line B, or otherwise #2.
Затем вы меняете первую строку, и теперь ваш файл выглядит так:
This is SPARTA.
This is line B, or otherwise #2.
Как бы вы описали изменение содержимого файла? Вы можете сказать, что первая строка «Это строка А.» его заменили на «Это СПАРТА», или даже последнее слово «А» в первой строке заменили другим словом «СПАРТА». И это именно то, что 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» как patch aka фиксирует ваши изменения или даже позволяет вам применить какой-либо файл исправлений, который у вас уже есть. Не вдаваясь в детали, git в этом смысле абсолютно такой же, как и другие системы контроля версий, такие как SVN, или даже CVS или производительность.
Надеюсь, это поможет!