华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】

1 文章目的

本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用。

2 概述

2.1 版本控制系统介绍

从狭义上来说,版本控制系统是软件项目开发过程中管理代码所有修订版本的软件,能够存储、追踪文件的修改历史,记录多个版本的开发和维护,事实上我们可以将任何对项目有帮助的文档交付版本控制系统进行管理。版本控制系统(Version Control Systems)主要分为两类,集中式和分布式。

2.1.1 集中式版本控制系统

集中式版本控制系统的特点是只有一台中央服务器,存放着所有研发数据,而其它客户端机器上保存的是中央服务器最新版本的文件快照,不包括项目文件的变更历史。所以,每个相关人员工作开始前,都需要从这台中央服务器同步最新版本,才能开始工作。

集中式版本控制系统的优点:

1. 操作简单,使用没有难度,可轻松上手。

2. 文件夹级权限控制,权限控制粒度小。

3. 对客户端配置要求不高,无需存储全套代码。

集中式版本控制系统的缺点:

1. 网络环境要求高,相关人员必须联网才能工作。

2. 中央服务器的单点故障影响全局,如果服务器宕机,所有人都无法工作。

3. 中央服务器在没有备份的情况下,磁盘一旦被损坏,将丢失所有数据。

2.1.2 分布式版本控制系统

分布式版本控制系统的特点是每个客户端都是代码仓库的完整镜像,包括项目文件的变更历史。所有数据分布的存储在每个客户端,不存在中央服务器。可能有人会问,我们公司使用Git分布式存储工具,也有“中央服务器”啊?其实,这个所谓的“中央服务器”仅仅是用来方便管理多人协作,任何一台客户端都可以胜任它的工作,它和所有客户端没有本质区别。

分布式版本控制系统的优点:

1. 版本库本地化,版本库的完整克隆,包括标签、分支、版本记录等。

2. 支持离线提交,适合跨地域协同开发。

3. 分支切换快速高效,创建和销毁分支廉价。

分布式版本控制系统的缺点:

1. 学习成本高,不容易上手。

2. 只能针对整个仓库创建分支,无法根据目录建立层次性的分支。

3 前提条件

3.1 华为云账号

使用华为软件开发服务,首先需要免费注册一个华为云账号。

3.2 Git客户端

Git是一款开源的分布式版本控制系统(Distributed Version Control System) ,诞生于2002年,由Linux之父Linus Torvalds带领Linux开源社区开发完成,初衷是用其管理Linux内核的庞大的开源代码。在当今敏捷开发成为主流,研发周期短,跨地域协同开发多的大形势下,选择Git版本管理工具是大势所趋。国内外有很多基于Git的云端代码托管服务,华为软件开发服务(Devcloud)配置管理服务就是其中之一。

代码托管(CodeHub)是面向软件开发者提供的基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支等。代码一键下载到本地,基于本地IDE开发,开发完毕一键推送云端,实现线上线下协同开发

3.2.1 Git Bash 下载安装

Git Bash客户端软件是本地PC使用git必须安装的软件,如果本地没有安装,请到https://git-scm.com/downloads下载。

安装成功以后,在开始菜单中会增加Git Bash选项。

3.2.2 配置个人信息

安装完成,运行Git Bash,在弹出终端页面按照下面操作进行个人配置。

3.2.3 生成密钥

运行Git Bash, 生成一对SSH密钥,在弹出的终端中输入下面命令,回车后会提示您输入一个密码,建议不输入,一路回车即可。

此时,会在~/.ssh文件夹下生成了一对密钥,公钥id_rsa.pub和私钥id_rsa,私钥无需处理,保存在本机就可以了,公钥的内容需要拷贝到软件开发服务中。

3.3 已经创建好的项目

创建项目

在华为云官网首页 产品 软件开发服务,进入华为软件开发服务首页。

点击右上角“新建”按钮新建项目

输入项目名称,选择开发流程,输入项目描述,点击“新建”按钮即完成了一个项目的创建。

4 Devcloud场景应用

4.1 CodeHub操作

4.1.1 新建空仓库

在开发云代码服务中,点击上方“新建仓库”按钮

新仓库的详细配置如下:

新建成功

4.1.2 粘贴ssh公钥

第一步:运行Git Bash,在终端执行如下命令,会将.ssh文件夹下的id_rsa.pub公钥内容(灰色背景的字符串)打印到终端,拷贝这些字符串,注意不要有多余的空格。

第二步:在开发云代码服务中,点击右上角的“设置SSH密钥”

第三步:继续点击右上角的“添加SSH密钥”

第四步:粘贴拷贝的公钥字符串,添加“标题”,点击“新建”就可以了。

4.2 云端仓库功能一览

5 Git本地研发场景

5.1 克隆代码

在本地准备克隆代码的目标文件夹,右键打开git bash终端

执行如下命令:

5.2 代码提交

一次修改被成功提交到远端仓库会历经四个阶段,1本地工作区->2缓存区->3版本库->4远端版本库,通过执行相应的Git命令,文件在这四个区域跳转,并呈现不同的状态,主要涉及三步操作:

#git add/rm filename //将新增、修改或者删除的文件增加到暂存区

#git commit –m “commit message” //将已暂存的文件提交到本地仓库

#git push //将本地代码仓库修改推送到远端仓库

5.3 分支操作

5.3.1 新建分支

Git新建分支的本质就是创建一个指向最后一次提交的可变指针,所以,Git分支的创建不是复制版本库的内容,仅仅是新建了一个指针,它以40个字符长度SHA-1字串形式保存在文件中。

#git branch branchName commitID

基于commitID即某一个全球版本号拉出新分支,如果没有commitID则基于当前分支的HEAD拉出新分支。

如下图新建feature分支执行的命令为git branch feature

5.3.2 切换分支

#git checkout branchName

如下图切换到feature分支执行的命令为git checkout feature

5.3.3 分支合并

无论哪种工作流都会涉及到分支合并(把一个分支中的修改整合到当前分支),主要有两种方法:三方合并(merge) 和衍合(rebase)。我们通过对同一种场景进行不同操作体会两种合并方法的区别。

场景:master分支新增了C4节点, hotfix分支新增了C3节点,现将hotfix分支合并到master分支:

1. 三方包括hotfix新增节点C3,master新增节点C4,以及两者的共同祖先节点C2。这种合并操作简单,但新增合并节点C5,形成了环形,版本记录可读性差。

#git checkout master

#git merge hotfix

2. 衍合先将master分支新增节点C4以补丁形式保存在.git/rebase目录中,然后同步hotfix分支最新代码,再应用补丁C4’。

#git checkout master

#git rebase hotfix

5.3.4 冲突解决

类型一:两个合并分支修改了同一行代码

解决方法:

1. 分析哪种修改方法正确,手动合并;

2. 提交修改。

类型二:文件被重命名为不同的名字

解决方法:

1. 确认哪个名字是正确的,删除错误的;

2. 提交修改。

6 Git工作流

什么是Git工作流?你可以理解为代码管理的分支策略,它不仅仅是版本管理范畴,更服务于项目流程管理和团队协同开发。所以,我们有必要制定适合自己研发场景的工作流。

下面介绍四种工作流的工作方式、优缺点,以及使用中的一些注意事项。

1. 集中式工作流

2. 功能分支工作流

3. gitflow工作流(Devcloud推荐)

4. forking工作流

6.1 集中式工作流

集中式工作流适合5人左右小开发团队,或是刚从SVN工具转型为Git的团队,它只有一个默认的maste分支(相当于svn的trunk主分支),所有人的修改都是在master分支上进行的。但是,这种工作流无法充分发挥git优势和多人协同,不推荐使用。

工作方式:

开发人员将master分支从中央仓库克隆到本地,修改完成后再推送回中央仓库master分支。

优点:

不涉及分支交互操作

缺点:

1. 不适合人员较多的团队,当人员10+时,解决开发人员之间的代码冲突会耗费很多时间;

2. master分支提交频繁;

3. master分支不稳定,不利于集成测试。

Tips:如何尽量避免产生冲突和不合理的提交历史?

开发人员在开发一个新功能之前,一定要在本地同步中央仓库最新代码,使自己的工作基于最新的代码之上;开发完成后,在提交新功能到中央仓库前,需要先fetch中央库的新增提交,并rebase自己的提交。这样做的目的是,把自己的修改加到中央仓别人已经提交的修改之上,使最终的提交记录是一个完美的线性历史,而不是环形。

举例:

1. 开发人员A和开发人员B同时在某个时间拉取了中央仓库的代码

2. 开发人员A先完成了自己的工作,并提交到中央仓库

3. 开发人员B需要在本地执行git pull –rebase中央仓库的新提交,这时开发人员B的本地仓库就包含了开发人员A修改的内容,并在A的基础上增加了自己的修改

4. 开发人员B将代码推送到中央仓库

6.2 功能分支工作流

通过新建几个功能分支,增加开发者的交流和协作,它的理念是所有的功能开发都应该在master分支外的一个独立分支进行,这种方式隔离了开发者的工作空间不被互相干扰,保证了master分支的稳定性。

工作方式:

开发人员每次在开始新功能开发前,需要在master分支上拉取一个新分支,并起个有描述性的名字,比如video-output或issue-#1061,这样可以让分支用途明确。功能分支不但存在开发人员本地仓库,也应该推送到中央仓库,这样就可以在代码不合入master分支的情况下与其他开发人员分享代码。

优点:

分支合并前可以使用pull request进行code review;

降低了master分支的提交频率

缺点:

只有一个master分支作为集成,仍然不是很稳定,不适合大型开发

6.3 Gitflow工作流

Gitflow一般用于管理大型项目,它为不同的分支分配一个很明确的工作角色,并定义分支之间什么时候进行交互。

工作方式:

master分支:生产分支,最稳定的版本,一直是ready to deploy状态。不接受开发人员直接commit,只接受从其他分支merge操作。在很多企业中,这个分支被默认开启分支保护,只有维护者可以操作。

hotfix分支:从master分支拉取的临时修复分支,用于解决一线紧急bug。bug解决后需要合入master分支并打上新的版本号,这个修改也需要同时合入develop分支。

develop分支:从master分支拉取的开发分支,用于功能集成。包含所有要发布到下一个Release的代码用于开发集成、系统测试。

release分支:临近既定的发布日,就从develop分支上拉取一个release分支,任何不在当前分支中的新功能都推到下个发布中。release分支用于发布,所以从当前时间点之后新的功能不能再加到这个分支上,这个分支只做Bug修复、文档生成和其它面向发布的任务。当对外发布的工作都完成了,release分支合并到master分支并分配一个版本号打好Tag;另外,这些从release分支新做的修改要反向合并回develop分支。

feature分支:开发者使用的特性分支,父分支是develop分支,当新功能完成时,合入develop分支。新功能提交从不直接与master分支交互。

开发人员提交新功能的两种途径:

1. 团队有专人review审核新功能

a) 开发人员将feature分支推送到华为软件开发云代码托管平台(中央仓库)

b) 发起一个从feature分支合并到develop分支的pull request请求,并指给review专员

c) review专员审核。如果通过,将feature分支的新功能合并到develop分支,并删除feature分支;如果未通过,拒绝该请求并注明拒绝原因。

2. 开发人员自审核新功能

a) 开发人员在本地仓库将feature分支合并到develop分支,并删除feature分支

b) 将本地develop分支的修改推送到华为软件开发云代码托管平台(中央仓库)

优点:

1. 使用一个用于发布准备的专门分支(release分支),使得一个团队可以在完善当前的发布版本的同时,可以在develop分支并行继续开发下个版本的功能。这也打造了可视化的发布阶段,团队成员都可以在仓库网状结构中可以看到发布状态;

2. 使用紧急修复分支(hotfix分支)让团队可以处理紧急问题的同时而不打断其它工作或是等待下一个发布再合入hotfix修改。我们可以把hotfix分支想成是一个直接在master分支上处理的临时发布;

3. 大型项目人员协作频繁,流程较多,合理的多角色分支帮助研发有条不紊进行;

4. 更符合devops理念。

缺点:

1. 学习成本较高;

2. 如果团队不遵守使用约定,带来的影响更大。

6.4 forking工作流

Forking工作流区别于前三种工作流的最大特点是每个开发人员都有一个从公共仓库fork出来的属于自己的公共仓。Forking工作流适合外包、众包以及众创和开源场景。接包方的开发人员从项目公共仓fork自己的公共仓库进行操作,并不需要被项目公共仓直接授权。

工作方式:

将“项目公共仓”fork出一个“个人公共仓”

将“个人公共仓”clone到“本地仓库”

操作“本地仓库”,修改完成后提交到“个人公共仓”

为“个人公共仓”提交一个pull request给项目维护者,申请代码合入“项目公共仓”

项目维护者在本地review、验证本地提交,审核通过后push进入“项目公共仓”

Tip:如果开发人员A的代码未被审核通过合入“公共仓库”,而此代码对开发人员B有借鉴作用,开发人员B可以直接从开发人员A的“个人公共仓”拉取代码。

优点:

1. 开发人员之间若需要代码协作,可以直接从其他人的“个人公共仓”拉取,无需等到代码提交到项目公共仓;

2. “项目公共仓”无需为每个代码贡献者授权;

3. 项目维护者通过审核pull request成为代码安全的重要防线;

4. 仓库分支的选择可以根据项目实际情况综合使用前三种工作流。

缺点:

1. 提交步骤繁琐,开发人员代码到最终版本库的周期较长。

研发团队可以根据实际研发场景制定合理的工作流,能有效提高项目管理水平和团队协同开发能力, 并通过DevCloud的CodeHub平台,高效、安全的管理代码资产,将更多的精力集中在业务开发上,实现持续集成、持续交付和快速迭代的目标。

华为云DevCloud,5人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网

原文地址:https://www.cnblogs.com/huaweicloud/p/12016294.html

时间: 2024-10-08 17:06:24

华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】的相关文章

Android开发的初学者快速创建一个项目

因为gwf的原因,大陆连不上google所以AndroidSDK是无法更新的 而且设置代理也不一定能解决问题 如果是初学者想快速的了解安卓开发,可以在国内的内网下载整合包 下载地址:http://rj.baidu.com/soft/detail/23485.html?ald 快速创建一个安卓项目------hello world! 1.file--Android application project 3.设置项目名称,app名称,app唯一标识.项目适用于安卓版本 4.图标,界面,项目位置,及

如何在华为云软件开发云上搭建JavaWeb,Maven项目

本文将使用华为云软件开发云向大家演示如何搭建JavaWeb,Maven项目. 一.相关信息 1.华为云软件开发云简介 华为云软件开发云(DevCloud)是集华为近30年研发实践,前沿研发理念,先进研发工具为一体的一站式云端DevOps平台,面向开发者提供包括项目管理,代码托管,流水线,代码检查,编译构建,测试管理,移动应用测试,部署,发布,CloudIDE,研发协同等基础功能的研发工具服务.覆盖软件开发全生命周期,支持多种主流研发场景,让软件开发更高效. 官网入口:https://www.hu

CSS3实战开发:手把手教你鼠标滑动特效开发

各位网友,如果你已经看过我的CSS3实战开发系列教程,我相信你对CSS3已经有了非常全面深刻的了解.有些人可能CSS3语法掌握了不少,但是真正实际用起来还有点生疏,甚至无从下手.请别担心,我会不断更新一系列实战开发案例,我会为大家分步骤剖析特效开发过程. 今天我将手把手带领大家开发一个鼠标滑动的特效案例,废话不多说,直接上效果动画: 你有没有觉得上面的这个特效很棒呢! 好,现在咱们就开始分步骤实战开发这个动画特效吧: 首先,我们先准备好html页面代码: <!DOCTYPE html> <

CSS3实战开发:百度新闻热搜词特效实战开发

各位网友,今天这篇文章,我将手把手带领大家开发百度新闻首页的"新闻热搜词"特效.在这个特效中应用的知识点都很基础,如果你对这些还不清楚,可以关注我以前写的详细教程.今天讲这个案例,也是希望告诉大家,在开发一个特效的时候,请不要将问题复杂化.可能有些人一开始真的不知道从哪下手,当你看完本次教程,你定会觉得,原来一切都这么简单. 可能有些人还不知道这个特效,啥也不说了,直接上效果图: 从上面的特效中,大家不难发现,当鼠标划过热搜词时,会有一个半透明的黑色背景滑上来,而且这个黑色区域中也是有

CSS3实战开发:手把手教大家搜索表单发光特效实战开发

各位网友,大家好,我是陌上花会开,今天这个案例,我将带领大家,手把手教大家开发一个会发光的表单组,还是先秀运行效果图吧: 从这个效果图,大家可以发现,当光标在某个组件上时,它就会发光,今天我将带领大家实战开发这个特效. PS: 大家可以直接将博客中的代码复制到本地便可得到同样的运行效果. 首先,我们先准备好html代码: <!doctype html> <html> <head> <meta charset="utf-8"><met

CSS3实战开发:使用CSS过滤效果来改变图片样式

</pre><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 25.1875px;">   我们知道,使用Photoshop来调整图像的亮度和对比度,或者将图片转化为灰度等等是很常见

使用命令创建github代码仓库,push本地仓库到github远程代码仓库

1.利用命令创建github远程代码仓库 在将本地代码push到github远程代码仓库之前,总是需要新建github代码仓库,在将本地仓库关联到github远程仓库.其中最为繁琐的操作是建立github代码仓库,需要进入github的网站进行操作,不能借助命令来简化操作,十分繁琐. 借助github提供的api,在.bashrc或者.zshrc文件中定义函数,可以利用命令在github上创建代码仓库,十分便捷. 首先需要进入github,申请并获取自己的api token,用于鉴权,地址在这.

如何创建一个 Git 仓库

你可以使用一个已存在的目录作为Git仓库 git init Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录). 使用方法 使用当前目录作为Git仓库,

升级版:深入浅出Hadoop实战开发(云存储、MapReduce、HBase实战微博、Hive应用、Storm应用)

      Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序