Git - Operação de Patch

Patch é um arquivo de texto, cujo conteúdo é semelhante ao Git diff, mas junto com o código, também possui metadados sobre commits; por exemplo, commit ID, data, mensagem de commit, etc. Podemos criar um patch a partir de commits e outras pessoas podem aplicá-los em seu repositório.

Jerry implementa a função strcat para seu projeto. Jerry pode criar um caminho de seu código e enviá-lo para Tom. Então, ele pode aplicar o patch recebido ao seu código.

Jerry usa o Git format-patchcomando para criar um patch para o último commit. Se você quiser criar um patch para um commit específico, useCOMMIT_ID com o comando format-patch.

[[email protected] project]$ pwd
/home/jerry/jerry_repo/project/src

[[email protected] src]$ git status -s
M string_operations.c
?? string_operations

[[email protected] src]$ git add string_operations.c

[[email protected] src]$ git commit -m "Added my_strcat function"

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

[[email protected] src]$ git format-patch -1
0001-Added-my_strcat-function.patch

O comando acima cria .patcharquivos dentro do diretório de trabalho atual. Tom pode usar este patch para modificar seus arquivos. Git oferece dois comandos para aplicar patchesgit ame git apply, respectivamente. Git apply modifica os arquivos locais sem criar commit, enquanto git am modifica o arquivo e cria commit também.

Para aplicar patch e criar commit, use o seguinte comando -

[[email protected] src]$ pwd
/home/tom/top_repo/project/src

[[email protected] src]$ git diff

[[email protected] src]$ git status –s

[[email protected] src]$ git apply 0001-Added-my_strcat-function.patch

[[email protected] src]$ git status -s
M string_operations.c
?? 0001-Added-my_strcat-function.patch

O patch é aplicado com sucesso, agora podemos ver as modificações usando o git diff comando.

[[email protected] src]$ git diff

O comando acima produzirá o seguinte resultado -

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)
   {