设为首页 收藏本站
查看: 734|回复: 0

[经验分享] Git: 本地创建版本库用于多处同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-1-14 07:53:43 | 显示全部楼层 |阅读模式
问题背景
  目前有一个 Android 和 一个 iOS 项目,两个项目底层使用相同的 C++ 代码。由于在开发迭代中代码时常更新,而且往往是今天 Android 部分修改一小部分,明天 iOS 部分修改一小部分,导致这一套代码渐渐显得有些无法管理。于是我考虑单独建一个 Git 仓库来管理这份代码。
  Android 和 iOS 项目各自已经是一个 Git 仓库,出于团队的考虑,不能修改原来的结构,只好重新创建仓库。

Git bare 仓库
  假设本地已经有一个普通的 Git 仓库,此时使用git clone命令 clone 一个新的仓库,这两个仓库里面的内容是一样的,包含所有的文件(工作区)和版本库(.git 文件夹),我们称之为对等的,也就是说本质上没有区别。但是不方便的地方在于只能新建的仓库只能git pull从原仓库拉取更新,而不能git push提交修改,会有如下报错:
  

remote: error: refusing to update checked out branch: refs/heads/master  
remote: error: By default, updating the current branch in a non-bare repository
  
remote: is denied, because it will make the index and work tree inconsistent
  
remote: with what you pushed, and will require 'git reset --hard' to match
  
remote: the work tree to HEAD.
  
remote:
  
remote: You can set 'receive.denyCurrentBranch' configuration variable to
  
remote: 'ignore' or 'warn' in the remote repository to allow pushing into
  
remote: its current branch; however, this is not recommended unless you
  
remote: arranged to update its work tree to match what you pushed in some
  
remote: other way.
  
remote:
  
remote: To squelch this message and still keep the default behaviour, set
  
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
  

  提交被拒绝。那么也就是说新建的仓库其实就是原来的一个备份。当然原仓库使用git push去更新那个新的仓库同样也是不行的,能做的只有新仓库使用git pull从原来的拉取更新。
  鉴于以上情况,我们需要使用裸版本库(bare repository)来做我们要做的事。bare repository 没有工作区(即需要版本控制的文件),只有版本库(即 .git 文件夹)。首先初始化中心的裸版本库
  

git init --bare center.git   

  然后在其他地方分别 clone 即可。
  

git clone ../demo-center/center.git android-bak  
git clone ../demo-center/center.git ios-bak
  

  clone 两次我就建立了两个新的仓库,分别用于两个项目。

版本控制实践
  那么具体的控制两处代码的方法是怎么样的呢?
  每次修改了代码以后,将代码同步至相应的备份文件夹,即 git 仓库,然后进行提交,另一个仓库拉取更新并将代码同步至原来的项目中。
  例如 Android 项目代码位于project/android/, iOS 项目代码位于project/ios/。然后同步的
  
git 仓库分别为 android-bak and ios-bak。那么 Android 代码更新后,同步至 android-bak 目录,提交代码并 push,同时 iOS 代码也有更新,同样更新至 ios-bak,然后本地提交代码,注意,此时需要先从 bare repository pull 一下,和本地的 commmit 合在一起了,再 push 上去。那么来自两个仓库的代码更改稳妥地合在一起了。另一边 android-bak 只需要 pull 一下,然后将更新的代码同步至原来的 project/android/ 即可。
  参考:
  《Git 权威指南》 蒋鑫

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434906-1-1.html 上篇帖子: win10下乌龟git安装和使用 下篇帖子: 切切歆语
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表