• 【Android】Git Patch生成的文件怎么合并到项目里面和遇到的一些问题


    前言

    Git patch是一种描述文件,它记录了一系列的文件变更(如新增、修改、删除)以及变更的具体内容。通过使用patch文件,可以将这些变更应用到其他代码库中,从而实现代码的同步和更新。

    Git 提供了两种补丁方案,一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。
    .diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
    .patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。

    生成
    创建patch和diff
    从某次提交(含)之前的几次提交创建Patch文件:
    git format-patch <commit_sha1_id> -n
    

    这个命令会从指定的提交开始往前数,生成指定数量的Patch文件。-n 参数表示生成的Patch文件数量,从指定提交开始往前数。

    示例:

    git format-patch 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 -2
    

    这个命令将生成从提交 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 开始往前数的两个Patch文件。

    创建某个提交的Patch文件:
    git format-patch <commit_sha1_id> -1
    

    这个命令会生成指定提交的Patch文件。

    示例:

    git format-patch 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 -1
    

    这个命令将生成提交 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 对应的Patch文件。

    创建某两次提交之间的所有Patch:
    git format-patch <commit_sha1_id1>..<commit_sha1_id2>
    

    这个命令会生成指定两次提交之间的所有Patch文件。

    示例:

    git format-patch 2a2fb4539925bfa4a141fe492d9828d030f7c8a8..89aebfcc73bdac8054be1a242598610d8ed5f3c8
    

    这个命令将生成从提交 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 到提交 89aebfcc73bdac8054be1a242598610d8ed5f3c8 之间的所有Patch文件。

    创建Diff文件的常用方法:
    使用 git diff 命令可以生成Diff文件。
    git diff <commit_sha1_id1> <commit_sha1_id2> > <diff_file_name>
    

    这个命令会生成两次提交之间的所有差异,并将其保存到指定的Diff文件中。

    示例:

    git diff 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 89aebfcc73bdac8054be1a242598610d8ed5f3c8 > patch.diff
    

    这个命令将生成提交 2a2fb4539925bfa4a141fe492d9828d030f7c8a8 和 89aebfcc73bdac8054be1a242598610d8ed5f3c8 之间的所有差异,并保存到名为 patch.diff 的文件中。

    使用Patch文件

    现在有一个【0001-.patch】文件,需要把它应用到项目里面。

    1.先把文件放在项目里面(随便找一个位置都可以,但是也不要太搞了,记住文件的位置绝对路径)

    2.使用这个文件

    git apply xxx.patch
    

    比如

    git apply D:\Android\AndroidProject\FormalProject\xxx\xxxxxxx-ad\xxxxxx\\debug\0001-.patch
    

    这里面我把这个文件放在我的debug文件目录下面了,这个都随便放的,但是要记得位置就好了

    要是没啥问题的话,这一步之后其实就完事了,代码就合并了,但是我们遇到了代码冲突问题

    比如

    D:\Android\AndroidProject\FormalProject\xxxx\xxx-ad>git apply D:\Android\AndroidProject\FormalProject\xxxx\xxx-ad\qqqqq\eeee\debug\0001-.patch
    error: patch failed: xxxx/src/main/java/com/wer/xxxx/work/newwork/MyActivity.java:35
    error: xxxx/src/main/java/com/southgnss/xxxx/work/newwork/MyActivity.java: patch does not apply
    error: patch failed: xxxx/src/main/res/layout/fragment_sample.xml:56
    error: xxxx/src/main/res/layout/fragment_sample.xml: patch does not apply
    

    通过这个错误可以看出,有两个地方存在了冲突,需要解决这两个冲突才可以合并下去。

    解决冲突

    首先我们先把不冲突的文件合并

    git apply --reject xxx.patch
    

    比如

    D:\Android\AndroidProject\FormalProject\xxx\xxxxx-ad>git apply --reject D:\Android\AndroidProject\FormalProject\xxx\xxxxx-ad\xxx\qqq\debug\0001-.patch
    

    经过这个之后,现在不冲突的代码已经被合并了,但是冲突的代码还在,冲突的代码会生成【.rej】文件,这个文件去哪里找呢?

    就在同名文件下面

    比如
    上面我们有两个文件冲突,其中一个文件是【MyActivity】这个文件冲突,在执行了【git apply --reject】之后,找到这个文件【MyActivity】所在的文件夹,此时在这个文件下面会有一个同名文件【MyActivity.java.rej】。
    打开这个文件然后对照【MyActivity】文件进行冲突的解决。

    当所有冲突文件解决之后,就可以删除【.rej】文件了,然后把之前的那个【0001-.patch】文件也可以删除了

    最后再检查一下代码,没问题了就可以正常的使用git提交代码了

  • 相关阅读:
    SIndex: A Scalable Learned Index for String Keys
    c++11中的bind和mem_fn与function的应用
    「专题速递」JPEG AI、端到端图像编码的标准化及产品落地、深度学习
    (c++版本)lambda表达式实现ROS2发布者节点(面向对象款式)(已经修正,可以运行)
    学习-Java数组之foreach遍历数组之正负数数量统计
    ElasticSearch - 分词器介绍及中文分词器es-ik安装
    代码随想录算法训练营Day44 | 动态规划(6/17) 完全背包理论基础 LeetCode 518. 零钱兑换 II 377. 组合总和 Ⅳ
    C++11的互斥量
    列表页面新增 字段查询 ,点击查询后,前端页面和后端控制台 出现红色报错信息,查询数据失败。
    记LGSVL Map Annotation(1) LGSVL本地编译记录、安装
  • 原文地址:https://blog.csdn.net/qq_43358469/article/details/139493204