2021-02-17 使用git和gitee实现云存储、多终端同步、版本和分支管理

之前一直使用微软的OneDrive作为云存储工具,但OneDrive的连接最近越发不稳定了,经常出现需要急用时连接不上的情况。国内的云存储大多是提供一个云盘,需要将文件下载到本地后使用,不像OneDrive能在后台保持本地与云端的同步,且国内的云盘免费使用的限制很多,带宽可怜。
我之所以偏好OneDrive,是因为它类似一个版本控制工具,能同步多个终端与云端的数据。而git可以算得上版本控制和多端协同的鼻祖了,其协同能力远超OneDrive一个数量级,国内的gitee码云是一个支持git同步的云盘,且能免费使用,何乐而不为。

1. git能提供什么

  • 提供本地目录与云端目录的同步,实现多终端协同
  • 提供版本管理、分支、合并,实现多人协同
  • 主要用于软件项目的多人协同和版本控制
  • 也可用于文档(word、odt、ppt、odp等)协作

2. 使用git的基本步骤和指令

1)在支持git协议的云端注册帐号、新建云端仓库
码云是国内支持git协议的云盘:https://gitee.com/,注册一个帐号,并创建一个私有仓库。
仓库创建后,可以打开该仓库,获取其HTTPS克隆地址。

2)在本地新建目录,并初始化为git目录

  • $ git init
    这一步实际是在本地目录中创建了一个隐藏文件夹.git,该文件夹中保存了与云端的连接信息、版本信息等

3)配置与云端的连接信息

  • $ git remote add <别名> <刚才获取的HTTPS克隆地址>
    以后可以通过这个别名指代云端仓库的地址。
    也可以通过git remote命令查看当前已配置的别名列表。

4)从云端仓库拉取文件

  • $ git pull <别名> master
    别名就是上一步添加的别名,master是一个默认分支,这个是在云端创建仓库时默认指定的,所以也可以修改名字,且还可以创建新的分支,这在后文介绍。
    若出现”拒绝合并无关历史“的错误提示,可使用git pull --allow-unrelated-histories进行拉取。

5)向云端推送文件

  • $ git add <文件名/目录名>
    添加对本地文件的跟踪,可以用通配符;
  • $ git commit -m '1.0.0:说明信息'
    此处需要添加-m参数,用于提供说明信息,若没有-m参数,则默认会打开vi编辑器,在编辑器中可输入多行具有html格式的说明信息;
  • $ git push <别名> <分支>
    我们可以通过git push --set-upstream <别名> <分支>来设定推送到的仓库和分支,以后直接使用git push就可以进行推送;
  • $ git config credential.helper store
    在push时,会要求输入用户名和密码,为了避免每次操作都需要进行认证,可配置git记录下首次输入的认证信息。

6)删除云端文件/目录

  • $ git pull
    首先将云端内容同步到本地;
  • $ git add <文件名/目录名>
    添加对欲删除文件/目录的跟踪;
  • 在本地删除文件或目录;
  • $ git commit -m 'xxx'
    提交更新
  • $ git push
    将更新推送到云端

7)分支的使用

  • $ git branch <分支名>
    创建分支
  • $ git checkout <分支名>
    检出到分支(设定指定分支为活动分支)
  • $ git merge <分支名>
    合并指定分支的内容到当前分支;
    若指定分支为当前分支的直接后继,则以Fast-Forward方式直接拨指针更新当前分支;
    若指定分支不是当前分支的直接后继,则进行合并提交,若两个分支不存在冲突,则合并成功,若存在冲突,则冲突文件会出现特殊标识区段,需手工修改这些区段后,通过git add <文件名>来标记冲突已解决。
  • $ git branch -a
    查看所有分支,*号开头的是当前分支,remotes/开头的是云端分支
  • $ git branch -d <本地分支名>
    删除本地已合并的分支,若想强制删除未合并分支,可用-D
  • $ git push origin --delete <云端分支名>
    删除云端分支

3. git的分支管理:GitFlow

git的分支可以任意定义,但以GitFlow的方式可定义符合软件工程规范的分支。GitFlow是由Vincent Driessen提出的一个git操作流程标准,包含如下几个关键分支:

master

  • 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布
  • 该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改
  • 另外所有在master分支的推送应该打标签做记录,方便追溯
  • 例如release合并到master , 或hotfix合并到master

develop

  • 主开发分支 , 基于master分支克隆
  • 包含所有要发布到下一个release的代码
  • 该分支为只读唯一分支 , 只能从其他分支合并
  • feature功能分支完成 , 合并到develop(不推送)
  • develop拉取release分支 , 提测
  • release/hotfix 分支上线完毕 , 合并到develop并推送

feature

  • 功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
  • 功能开发完毕后合到develop分支(未正式上线之前不推送到远程中央仓库!!!)
  • feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除

release

  • 测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆
  • 主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后合并到develop/master分支并推送(完成功能) , 打Tag
  • 属于临时分支 , 功能上线后可选删除

hotfix

  • 补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
  • 修复完毕后合并到develop/master分支并推送 , 打Tag
  • 属于临时分支 , 补丁修复上线后可选删除
  • 所有hotfix分支的修改会进入到下一个release
git.png

GitFlow 的优势有如下几点:

  • 并行开发:GitFlow可以很方便的实现并行开发。每个新功能都会建立一个新的feature分支,从而和已经完成的功能隔离开来,而且只有在新功能完成开发的情况下,其对应的feature分支才会合并到主开发分支上。另外,如果你正在开发某个功能,同时又有一个新的功能需要开发,你只需要提交当前feature的代码,然后创建另外一个feature分支并完成新功能开发。然后再切回之前的 feature 分支即可继续完成之前功能的开发。
  • 协作开发:GitFlow 还支持多人协同开发,因为每个feature分支上改动的代码都只是为了让某个新的feature可以独立运行。同时我们也很容易知道每个人都在干啥。
  • 发布阶段:当一个新feature开发完成的时候,它会被合并到develop分支,这个分支主要用来暂时保存那些还没有发布的内容,所以如果需要再开发新feature,我们只需要从develop分支创建新分支,即可包含所有已经完成的feature 。
  • 支持紧急修复:GitFlow还包含了hotfix分支。这种类型的分支是从某个已经发布的tag上创建出来并做一个紧急的修复,而且这个紧急修复只影响这个已经发布的tag,而不会影响到你正在开发的新feature。

你可能感兴趣的:(2021-02-17 使用git和gitee实现云存储、多终端同步、版本和分支管理)