Patch est un programme Unix qui met à jour les fichiers texte selon les instructions contenues dans un fichier séparé, appelé fichier patch.
Donc, en d'autres termes, cela peut signifier le fichier avec des instructions ou un programme qui traite ce fichier et l'applique à quelque chose.
Maintenant, qu'est-ce qu'un fichier patch? Disons que vous avez un fichier texte avec 2 lignes:
This is line A.
This is line B, or otherwise #2.
Ensuite, vous modifiez la première ligne, et maintenant votre fichier ressemble à ceci:
This is SPARTA.
This is line B, or otherwise #2.
Comment décririez-vous la modification du contenu du fichier? Vous pouvez dire que la première ligne "Ceci est la ligne A." a été remplacé par "Ceci est SPARTA.", ou même le dernier mot "A" de la première ligne remplacé par un autre mot "SPARTA". Et c'est exactement ce que diff nous dit. Disons que j'ai deux versions de ce fichier, une appelée file1.txt et une autre file2.txt, puis je lance diff et obtient ceci:
$ 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.
Ayant une description des modifications, vous pouvez l'appliquer à un contenu initial et obtenir un contenu modifié. Et ces changements, mis dans un format unifié que les programmes de type «patch» peuvent comprendre, s'appellent un fichier de patch. C'est comme au lieu d'obtenir un poisson de quelqu'un, ils vous apprennent à pêcher, afin que vous puissiez creuser vous-même ce poisson hors des eaux. Maintenant, appliquons notre patch à file1.txt pour le faire ressembler exactement à 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.
$
Vous pensez peut-être qu'il est plus facile de n'avoir que deux versions de ce fichier. Eh bien, dans ce cas simple, c'est vrai. Mais lorsque vous avez beaucoup de fichiers et que ces fichiers sont très volumineux, il est beaucoup plus efficace d'avoir quelques lignes de modifications plutôt que deux copies de l'ensemble.
En termes de git, le fichier patch signifie toujours la même chose, mais utiliser diff + patch vous-même serait un cauchemar. Par exemple, vous devrez toujours extraire deux versions du fichier (ou même l'ensemble du référentiel) afin de les comparer. Ça ne sonne pas si bien, n'est-ce pas? Donc git s'occupe de tout le travail dur pour vous - il compare votre fichier local avec ce qui se trouve dans le référentiel avec lequel vous travaillez, et peut vous le montrer comme un "diff", ou appliquer ce "diff" comme un patch aka validez vos modifications, ou vous permet même d'appliquer un fichier de correctif que vous avez déjà. Sans entrer dans les détails, en ce sens, git est absolument le même que d'autres systèmes de contrôle de version comme SVN, ou même CVS ou perforce.
J'espère que ça aide!