• 【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提交代码了

  • 相关阅读:
    卷积神经网络原理及其C++/Opencv实现(6)—前向传播代码实现
    多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug
    基于RIP的MGRE实验
    七个很实用的开源项目「GitHub 热点速览」
    hadoop配置nfs,window映射nfs
    React props属性使用及子传父组件使用
    JAVA虚拟机的性能监控
    【学习笔记】《深入浅出Pandas》第17章:Pandas实战案例
    Windows系统的——终端命令行进入文件夹、打开程序或文件、返回路径、切换磁盘、查看路径包含的所有内容和配置环境变量操作
    Bean装配相关注解使用说明
  • 原文地址:https://blog.csdn.net/qq_43358469/article/details/139493204