赞
踩
在开发中涉及多人开发场景时,经常会使用
git
来进行版本控制,通常我们都将代码推到远程服务器,方便大家统一最新代码;但是如果远程服务挂了之后你又会如何合并代码呢?
关联篇
我以前很少用到 git bundle
相关命令,如果不是遇到现在这个场景,可能也就这么错过了吧…
所遇场景: 多人协同开发时,如果当前git服务器已挂,如何合并代码?
可能场景:如果你遇到以下这些问题,也可以采用该篇的处理方式
本地网络(网络中断、无网)存在问题
,期望合并代码存在内外网的环境,如在外(外网)办公,出于安全考虑没有接入内网的权限
,期望合并代码无线、有线网卡发生故障,未拥有共享服务器权限
,期望合并代码当面临这样的情况,大多数人可能会想到以下方式
首先如果选用原始copy方法的话,可以先将需 copy 文件进行压缩,然后通过 聊天工具(类似Wechat等)、邮件、U盘等方式将zip压缩包发给同事;
假设采用这种方式,可能有以下场景
如果文件涉及多人修改,就需要多人协同处理冲突方可!而且随着项目公共部分修改越多,那么就越繁琐且易出错!
故以上方式,非必要的话,不推荐采用!
采用方式:通过 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
git bundle unbundle xx.bundle]
尝试结果
同事要合并我代码,首先我需要打一个bundle包
(被需求方)
个人建议 Tip:
#原始命令格式
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
会在当前项目内生成一个对应的 bundle 文件
验证 bundle是否有效
(一般不用验证,有问题也可以回头来看)
#原始命令格式
git bundle verify <file>
#验证bundle是否有效
git bundle verify bundlepath
#我在使用bundle合并代码时,通过 git bundle verify 验证有效性(实战自用)
git bundle verify name.bundle
执行结果:首先 is okay
证明没问题,其次显示了部分 commit 信息
列出 bundle 文件中包含的 commit 和分支(一般不用验证,有问题也可以回头来看)
#原始命令格式
git bundle list-heads <file> [<refname>…]
#我在使用bundle合并代码时,通过 git bundle verify 列出顶端提交(实战自用)
git bundle list-heads name.bundle
执行结果:显示我们合并 bundle
后,同事提交的 commit
信息
1. 合并 bundle 文件到项目内,进行代码合并(需求方)
将同事发过来的 bundle 文件copy到项目内
2. 从 bundle
中取出目标分支到我们仓库中的临时分支
#命令简介
git fetch mybundle 当前分支:本地临时分支
#基于目标分支加载bundle文件将其存在临时分支(实战自用)
git fetch name.bundle app/t:app/temp
#在当前分支将临时分支合并在一起(实战自用)
git merge app/temp
执行结果
fetch 成功效果
,类似下图
当你看到类似的画面,证明你已经合并(Merge)成功了(如平时使用git pull 的场景相同)
如果合并代码中遇到了冲突,我们按照常规方式处理即可(处理冲突,然后commit
),可以用git命令,也可以在As内操作(可以设置侧边显示commit操作栏)
有兴趣也可以通过 git branch
看看目前分支和临时分支
想再次确定是否合并 bundle
成功,也可以看看 log信息
参考资源
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。