git仓库之间代码合并的一种思路

755 阅读2分钟

在做项目时遇到需要外司提供代码的场景,比如需要外司提供部分驱动代码,所以需要有两个仓库村粗代码,一个仓库用于外司提交代码,另一个仓库用于当然是公司自用于提交代码。

接下来看一下操作步骤:

image.png

由上图看,有两个仓库,分为对内和对外仓库。对外仓库只用于对外合作的公司提交代码,再把对外仓库的代码合到内部仓库。接下来外仓用于表示对外仓库,内仓用于表示对内仓库。

一、生成patch

一般我们不更改对外仓库的代码那么,对外仓库代码就可以直接提交到主分支(master分支)。

  1. 从外仓master分支上,拉取最新commit到本地仓库,使用git pull或git fetch都可以;
  2. 先查看内仓ws_base分支最新的commit,对应的是外仓master分支上的哪个commit,在外仓上选择要合入的commit,使用git git format-patch commit-id1..commit-id2 生成patch包。
二、合入patch
  1. 切换到内仓的ws_base分支,准备合入patch;
  2. 检查上述内仓生成并存放的patch文件:git apply --stat xxx.patch;
  3. 检查patch能否应用成功:git apply --check xxx.patch;
  4. 合入patch:git am --signoff < xxx.patch。
注:
1、内仓的ws_base仅用来合入外仓的patch,所以2、3都会直接通过,且4是没有冲突的,只是做个确认步骤;
2、合并完成后外仓master分支和内仓rws_base分支的代码完全一致;
3、在使用2、3步骤时可能出现一些错误提示,其实不必担心,一来时外仓patch的代码没有动过不回产生冲突,二来更改的代码可能只是一些字符不合规,不会影响代码。
三、将内仓ws_base分支合入dev分支进行验证和开发

1、git checkout dev 切换到内仓分支到dev分支,git pull 拉取远程最新commit; 2、把ws_base分支merge到dev分支(git merge ws_base),解决冲突; 3、git push origin dev,将代码更新到远程分支。

注意事项

使用 git format-patch commit-id1..commit-id2 没有生成patch解决方案

// 对从commit-id1到commit-id2之间的每一个提交生成patch,不包括commit-id1,包括commit-id2。可以从任意位置commit-id1 至 commit-id2,只需注意两者之间的顺序
git format-patch commit-id1..commit-id2 

// 查看两个commit之间的不同
git diff commit-id1 commit-id2

那么注意可能是commit-id 错误导致

对于一般这种场景,我们可以使用其他命令替换这种方式生成patch:

  1. 指定某个commit

     git format-patch commit-id
     
    
  2. 最近的几个提交

    // 生成最新的几个提交分支
    git format-patch -n
    // 查看最新的几个提交
    git log -n
    

以上是提供一种公司间合作代码规范的一种方式