Git - Fonctionnement des patchs

Patch est un fichier texte, dont le contenu est similaire à Git diff, mais avec le code, il contient également des métadonnées sur les commits; par exemple, ID de validation, date, message de validation, etc. Nous pouvons créer un patch à partir de validations et d'autres personnes peuvent les appliquer à leur référentiel.

Jerry implémente la fonction strcat pour son projet. Jerry peut créer un chemin de son code et l'envoyer à Tom. Ensuite, il peut appliquer le patch reçu à son code.

Jerry utilise le Git format-patchcommande pour créer un patch pour le dernier commit. Si vous souhaitez créer un patch pour un commit spécifique, utilisezCOMMIT_ID avec la commande format-patch.

[jerry@CentOS project]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git status -s
M string_operations.c
?? string_operations

[jerry@CentOS src]$ git add string_operations.c

[jerry@CentOS src]$ git commit -m "Added my_strcat function"

[master b4c7f09] Added my_strcat function
1 files changed, 13 insertions(+), 0 deletions(-)

[jerry@CentOS src]$ git format-patch -1
0001-Added-my_strcat-function.patch

La commande ci-dessus crée .patchfichiers dans le répertoire de travail actuel. Tom peut utiliser ce patch pour modifier ses fichiers. Git fournit deux commandes pour appliquer des correctifsgit amet git apply, respectivement. Git apply modifie les fichiers locaux sans créer de validation, tandis que git am modifie le fichier et crée également un commit.

Pour appliquer le correctif et créer un commit, utilisez la commande suivante -

[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src

[tom@CentOS src]$ git diff

[tom@CentOS src]$ git status –s

[tom@CentOS src]$ git apply 0001-Added-my_strcat-function.patch

[tom@CentOS src]$ git status -s
M string_operations.c
?? 0001-Added-my_strcat-function.patch

Le patch est appliqué avec succès, maintenant nous pouvons voir les modifications en utilisant le git diff commander.

[tom@CentOS src]$ git diff

La commande ci-dessus produira le résultat suivant -

diff --git a/src/string_operations.c b/src/string_operations.c
index 8ab7f42..f282fcf 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,5 +1,16 @@
#include <stdio.h>
+char *my_strcat(char *t, char *s)
diff --git a/src/string_operations.c b/src/string_operations.c
index 8ab7f42..f282fcf 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,5 +1,16 @@
#include <stdio.h>
+char *my_strcat(char *t, char *s)
+
{
   +
   char *p = t;
   +
   +
   +
   while (*p)
   ++p;
   +
   while (*p++ = *s++)
   + ;
   + return t;
   +
}
+
size_t my_strlen(const char *s)
{
   const char *p = s;
   @@ -23,6 +34,7 @@ int main(void)
   {