git 补丁(patch)操作



  • 补丁操作

    补丁是一个文本文件,其内容类似于git diff,但是与代码一起,还包含有关提交的元数据。例如,提交ID,日期,提交消息等。我们可以从提交中创建补丁,其他人可以将其应用于其存储库。Jerry为其项目实现了strcat函数。杰里可以创建他的代码的路径,并将其发送给Tom。然后,他可以将收到的补丁应用到他的代码。Jerry使用git format-patch命令为最新提交创建补丁。如果要为特定的提交创建补丁,则将COMMIT_ID与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
    
    
    上面的命令在当前工作目录中创建.patch文件。汤姆可以使用此补丁来修改他的文件。Git提供了两个命令来分别应用补丁git amgit applygit apply修改本地文件而不创建提交,而git am修改文件并创建提交。要应用补丁并创建提交,请使用以下命令-
    
    [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
    
    
    该补丁已成功应用,现在我们可以使用git diff命令查看修改。
    
    [tom@CentOS src]$ git diff
    
    
    上面的命令将产生以下结果-
    
    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)
       {