当前位置:   article > 正文

Git指南 - 无网环境通过 git.bundle 合并代码_git bundle合并

git bundle合并

在开发中涉及多人开发场景时,经常会使用git来进行版本控制,通常我们都将代码推到远程服务器,方便大家统一最新代码;但是如果远程服务挂了之后你又会如何合并代码呢?

关联篇

我以前很少用到 git bundle 相关命令,如果不是遇到现在这个场景,可能也就这么错过了吧…

前情提要

所遇场景: 多人协同开发时,如果当前git服务器已挂,如何合并代码?

可能场景:如果你遇到以下这些问题,也可以采用该篇的处理方式

  • 本地网络(网络中断、无网)存在问题,期望合并代码
  • 很多公司存在内外网的环境,如在外(外网)办公,出于安全考虑没有接入内网的权限,期望合并代码
  • 无线、有线网卡发生故障,未拥有共享服务器权限,期望合并代码

当面临这样的情况,大多数人可能会想到以下方式

  • 将变更类、配置 copy 一份出来给到需要合并的同事…
  • 直接 copy 一份项目给到同事…

首先如果选用原始copy方法的话,可以先将需 copy 文件进行压缩,然后通过 聊天工具(类似Wechat等)、邮件、U盘等方式将zip压缩包发给同事;

假设采用这种方式,可能有以下场景

  • 如果文件只涉及新增部分的话,应该是最简单的,直接copy到对应目录即可
  • 如果文件修改部分只涉及单个人的话,应该也相对简单,直接覆盖对应文件即可
  • 如果文件涉及多人修改,就需要多人协同处理冲突方可!而且随着项目公共部分修改越多,那么就越繁琐且易出错!

故以上方式,非必要的话,不推荐采用!


合并过程

采用方式:通过 git bundle 命令,完成无网情况下的代码合并

常规开发中我们先将代码 commit 到本地,然后再 push 到远端服务器;因为当前我们网络环境已经出现问题,所以不用push远端,但是依旧需要将代码 commit 到本地~

bundle:因为我自身从事客户端研发,在我印象中进程间通信时经常会用到bundle去包装数据,包含基本类型、包装类等,只是没想到git也提供了bundle的使用方式和场景

git bundle原理 :将原始我们要push到远端的代码(所传输的所有内容),打包成一个二进制文件,然后将这个 bundle 文件发给需要合并代码的人员,然后解包到其他的仓库中(应该类似拆装箱)。

提醒々需注意:

  • 使用git相关命令时需在对应项目目录下开启命令执行窗口!
  • 使用git bundle 合并代码时,最好是在之前已经有了本地库的场景下操作(不行就让同事打包个项目zip再使用)

常见命令

#创建bundle文件
git bundle create <file> <git-rev-list-args>
#查看bundle文件有效性
git bundle verify <file>
#查看bundle文件commit信息
git bundle list-heads <file> [<refname>…​]

#在远程存储库中列出引用
git ls-remote xx.bundle
#解析bundle文件,删除bundle新增部分(尝试,未确定)
git bundle unbundle <file> [<refname>…​]
#设置bundle文件的时效性(未尝试)
git bundle create mybundle --since=10.days master
#设置bundle文件的有效commit数量(未尝试)
git bundle create mybundle -10 master
#把bundle中的commit克隆到本地仓库,不确定导入的项目是否要求有、没有.git目录(未尝试)
git clone name.bundle dir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

git bundle unbundle xx.bundle] 尝试结果

在这里插入图片描述

git bundle

在这里插入图片描述


被需求方

同事要合并我代码,首先我需要打一个bundle包(被需求方)

个人建议 Tip:

  • 首次合并建议选取公共仓库的最后一个commitid,因为
  • 命令中 bundle 文件被命名为name.bundle,按理是可以自行更改的
#原始命令格式
git bundle create <file> <git-rev-list-args>

#将本地分支打包成name.bundle 二进制文件
 git bundle create name.bundle HEAD locbranch

#从bundle拉取代码时,本地仓库必须要包含commitid的提交历史才可以(每一个commit都会有对应的commitid)
 git bundle create name.bundle locbranch ^commitid 把commitid后面的提交打进bundle文件中

#我在使用bundle合并代码时,通过 git bundle create 生成的bundle文件(实战自用)
git bundle create name.bundle app/t ^a78c9886d95f7f4ff67054cc61bd178b88888888
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

会在当前项目内生成一个对应的 bundle 文件

在这里插入图片描述

验证 bundle是否有效(一般不用验证,有问题也可以回头来看)

#原始命令格式
git bundle verify <file>

#验证bundle是否有效
git bundle verify bundlepath

#我在使用bundle合并代码时,通过 git bundle verify 验证有效性(实战自用)
git bundle verify name.bundle
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

执行结果:首先 is okay 证明没问题,其次显示了部分 commit 信息

在这里插入图片描述

列出 bundle 文件中包含的 commit 和分支(一般不用验证,有问题也可以回头来看)

#原始命令格式
git bundle list-heads <file> [<refname>…​]

#我在使用bundle合并代码时,通过 git bundle verify 列出顶端提交(实战自用)
git bundle list-heads name.bundle
  • 1
  • 2
  • 3
  • 4
  • 5

执行结果:显示我们合并 bundle 后,同事提交的 commit 信息

在这里插入图片描述


需求方

1. 合并 bundle 文件到项目内,进行代码合并(需求方)

将同事发过来的 bundle 文件copy到项目内

在这里插入图片描述

2. 从 bundle 中取出目标分支到我们仓库中的临时分支

#命令简介
git fetch mybundle 当前分支:本地临时分支

#基于目标分支加载bundle文件将其存在临时分支(实战自用)
git fetch name.bundle app/t:app/temp
#在当前分支将临时分支合并在一起(实战自用)
git merge app/temp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

执行结果

fetch 成功效果,类似下图

在这里插入图片描述

当你看到类似的画面,证明你已经合并(Merge)成功了(如平时使用git pull 的场景相同)

在这里插入图片描述

如果合并代码中遇到了冲突,我们按照常规方式处理即可(处理冲突,然后commit),可以用git命令,也可以在As内操作(可以设置侧边显示commit操作栏)

在这里插入图片描述

有兴趣也可以通过 git branch 看看目前分支和临时分支

在这里插入图片描述

想再次确定是否合并 bundle 成功,也可以看看 log信息

在这里插入图片描述

参考资源

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/825068
推荐阅读
相关标签
  

闽ICP备14008679号