Git: 本地创建版本库用于多处同步
问题背景
目前有一个 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 权威指南》 蒋鑫
Git: 本地创建版本库用于多处同步的更多相关文章
- git入门 创建版本库, 版本管理 分支 标签
参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GIT最流行的分布式版本 ...
- Git学习之路(2)-安装GIt和创建版本库
▓▓▓▓▓▓ 大致介绍 前面一片博客介绍了Git到底是什么东西,如果有不明白的可以移步 Git学习之路(1)-Git简介 ,这篇博客主要讲解在Windows上安装Git和创建一个版本库 ▓▓▓▓▓▓ ...
- 学习笔记--Git安装 创建版本库 图文详解
一.Git下载 在Windows上安装git,一般为msysgit,官网地址:http://git-scm.com/ 我下载的是Git-1.9.2-preview20140411.exe 二.Git安 ...
- Git学习--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- [git]入门-创建版本库
转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256 ...
- Git学习第一天--安装Git和创建版本库
Windows上安装Git msysgit是Windows版的Git,从https://git-for-windows.github.io下载(备份:百度网盘),然后按默认选项安装即可. 安装完成后, ...
- git之创建版本库
好吧,你知道了git既然有这么多好处,那么我们接下来就可以使用git命令来创建我们的仓库.这一节我们来学习一下如何在windows下面建立自己的仓库.首先我们先在本地创建一个主目录,比如文件名字叫le ...
- 安装 git,并创建版本库 记录一下
参考大神网址: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374325 ...
- Git学习笔记(一)创建版本库并添加文件
最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name &quo ...
随机推荐
- Java学习笔记27(集合框架一:ArrayList回顾、Collection接口方法)
集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组的区别: 1.数组的长度是固定的,集合的长度是可变的 2.集合中存储的元素必须是引用类型数据 对ArrayList集合的回顾 示例 ...
- 大公司的资深工程师和小公司的Leader如何决择?
很多人在技术的道路上,都会面临选择,一个是大公司的资深工程师/技术专家,一个是小公司的leader,这个选择是一条分叉路口,是持续纵向深入发展,还是横向发展.这实际上就是个人职业规划问题. 接着往专家 ...
- HTML知识点总结之table
table元素 table用来创建表格,表格也可以用来布局,但是嵌套过于复杂,不利于灵活布局,已经几乎没人用它来布局了. 表格基本上有如下几个标签构成: (1)<table>标签用来创建表 ...
- git 本地代码到github
一·什么是gitHub? 官网解释:gitHub是一个让无论处于何地的代码工作者能工作于同一个项目,同一个版本的平台.(GitHub is a code hosting platform for ve ...
- Spring Boot实战:集成Swagger2
一.Swagger简介 上一篇文章中我们介绍了Spring Boot对Restful的支持,这篇文章我们继续讨论这个话题,不过,我们这里不再讨论Restful API如何实现,而是讨论Restful ...
- koa2教程(一)-快速开始
来自Koa官网对于Koa的简介: koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 async ...
- 初学Vue之数量加减
效果图: HTML: <div class="count3"> <ul> <li v-for="(key,idx) in liList&qu ...
- tomcat 日志切割 catalina.out
在实际生产环境中,tomcat的 catalina.out日志默认是不切割的,由于看起来很不方便,以及在备份等方面都比较麻烦.是时候切割该文件了. 环境说明 centos 7.3 tomcat 8.5 ...
- Tomcat多个项目部署,通过Nginx反向代理分别配置二级域名的流程
购买域名.示例:example.com 设置多个二级域名.如图: 配置tomcat文件: 修改tomcat/conf目录下的server.xml文件: 如下配置配置了3个容器,使用三个不同的端口. 请 ...
- Node+mongodb线上部署到阿里云
Node+mongodb线上部署到阿里云 部署使用的主要工具是pm2+nginx,使用码云的私有仓库,自动部署到服务器,私有仓库和服务器要事先设置好免密码登录.使用DNSPOD进行域名解析.事先准备好 ...