基于华为云讲解git的配置与工作流的操作流程

因为我们项目团队使用华为云比较多,所以本文的远程仓库主要参考华为云代码托管项目,但是从配置和工作流本身来讲,是不依赖于具体的远程托管仓库的,任何仓库都可以。

1 git基本操作

1.1 git客户端安装

本文主要想讲解本地的配置以及工作流,至于如何安装网上有很多资料。如果没有安装过git,可以参考下面的链接,进行安装。

华为云-Git客户端安装

1.2 git必知概念

屏幕快照 2019-10-02 下午10.44.02.png

如果不熟悉git,请务必查资料理清以下概念:

  • workspace 工作区
  • index(staging area) 暂存区
  • repository 本地仓库区
  • remote 远程仓库区

简单来说,如上图所示,我们从远程仓库clone下来代码到本地仓库区,任何增添修改会发生在当前的工作区。如果进行了add操作,相当于增/改/删的代码添加到暂存区,然后通过commit命令,修改就会提交到本地仓库区。如果想要将本地修改推送给远程仓库,就要用到push命令。

1.3 常用操作

华为云-git客户端操作

git全局设置

在安装完毕git之后,要对git进行全局的设置,最好采用如下的设置。

git config --global user.name 你的英文名
git config --global user.email 你的邮箱
git config --global push.default simple 
git config --global core.quotepath false
git config --global core.autocrlf input

以上5行都是对git进行全局配置

  • 第一行和第二行的英文名和邮箱跟 GitHub (或华为云CodeHub)没有关系。可以跟 GitHub/CodeHub 的用户名和邮箱保持一致,也可以不一致。
  • 第三行push.default是设置push的模式,其实现在最新的git版本默认就是simple模式,如果你对git不熟悉,就不要修改为其他模式了。
  • 第四行core.quotepath false是让git支持utf-8编码
  • 第五行core.autocrlf input 是和回车换行有关的,Windows使用回车CR和换行LF两个字符来结束一行,而Mac和Linux只使用换行LF一个字符,说起来有点复杂,可以参考这篇文章

设置SSH key

为了避免每次提交代码都要输入账号密码,请将本机生成的ssh公钥复制后,登录华为云代码托管的个人设置中,添加ssh密钥。

具体的操作见下面的链接。

华为云-设置SSH key教程

ssh-keygen -t rsa -C "您的邮箱"
cat ~/.ssh/id_rsa.pub  # 得到公钥内容,复制粘贴到华为云指定位置

git常用命令

以下是常用到的git命令,可参考下方链接进行了解。

华为云-git常用命令

git clone ...
git status
git add .
git commit -m "xxx"
git pull
git push

git checkout newbranch

2 Gitflow工作流

动手开发前,请务必熟悉以下流程。

一般情况下我们会将master和develop两个分支设置为保护分支,这意味着开发者无法将本地代码直接push到这两个分支,而需要在华为云代码仓库中请求合并。

2.1 常用操作

第一步,克隆远程仓库到本地,并创建本地develop分支

git clone git@codehub.devcloud.huaweicloud.com:xxxx.git
git branch develop origin/develop

第二步,基于develop新建自己的分支(从master分支转移到自己的分支)

git checkout -b susu/my-new-feature develop

第三步,在自己的功能上开展本地的工作(在自己的分支上)

git status 
git add .
git commit -m "xxx"

第四步,更新develop分支并合并到自己的开发分支(仍然在自己的分支上)

// 把远程仓库的分支pull到本地,再与本地的指定分支合并。
git pull origin develop:develop
// 解决自己分支的冲突,add,commit,然后推送给远程的susu/my-new-feature分支
git push -u origin susu/my-new-feature

不要在本地的develop上修改东西!不要在本地的develop上修改东西!不要在本地的develop上修改东西!如果本地修改过develop分支,那么上面的git git pull origin develop:develop命令会失败,这里有两种情况

  1. 不保留develop中的commit
  2. 保留develop中的commit

第一种情况,直接清理掉本地develop分支,并重新创建一个

git branch -D develop
git branch develop origin/develop
// 确保回到自己的分支
git checkout susu/my-new-feature
git merge develop
// 解决自己分支的冲突,commit
git push -u origin susu/my-new-feature

如果develop上修改不多,可以对add或者commit做撤销处理。但是这种做法稍微有点麻烦,容易出错,不推荐。

如果在develop中git add .了内容,还没有commit

use "git checkout -- <file>..." to discard changes in working directory

如果在develop中commit了(远程develop分支做了保护,不允许直接push)

git reset --hard xxxxxx

第二种情况,需要先将本地develop分支内容merge到自己的分支,然后重新创建一个与远程同步的本地develop分支

git checkout susu/my-new-feature
git merge develop
// 解决自己分支的本地冲突,commit
// 清理掉本地develop分支,重新创建一个与远程相同的,并合并到本地
git branch -D develop
git branch develop origin/develop
// 确保回到自己的分支
git checkout susu/my-new-feature
git merge develop
// 解决自己分支的冲突,commit
git push

第五步,提出向远程develop合并的请求

可以去到华为云中提交合并请求。在GitHub中,这一步我们通常成为PR(Pull Request)

2.2 理论介绍

操作流程是按照下面的gitflow工作流原理来的,所以有必要了解一下整个工作流的原理。

华为云-Gitflow工作流介绍

Gitflow工作流
  • master :是用来上线的生产分支
  • hotfix :从master拉取的临时修复分支,解决一线紧急bug,bug解决后合并到master并打上新的版本号。这个修改同时需要合并到develop分支
  • develop:是从master拉取的开发分支,用于功能集成。包含所有要发布到下一个release的代码
  • release:临近既定的发布日,就从develop分支拉取出一个release分支。任何不在当前分支中的新功能都推到下一个发布中。realese分支用于发布,所以从当前时间点后新的功能不能再加到这个分支上,这个分支只做bug修复、文档生成和其他面向发布的任务。当对外发布的工作都完成了,release分支合并到maser分支并分配一个版本号打上tag;另外,这些release分支新做的bug修复要反向合并回到develop分支
  • feature:开发者使用的特性分支,父分支是develop,当新功能完成时,合并入develop分支。新功能的提交从来不与master分支交互

3 减少冲突的最佳实践

操作步骤

  1. 开发者完成了一天的工作,要在自己的分支(如susu/my-new-feature)上commit代码
  2. checkout到develop分支上,pull一下,把服务器上develop代码拉下来,保证本地的develop是最新的代码
  3. checkout回到susu/my-new-feature分支上,将本地的develop分支merge到susu/my-new-feature(如果本地develop并没有做过任何修改,步骤2和步骤3可以合并为git pull origin develop:develop)
  4. 如果有冲突,则解决本地冲突
  5. add,commit自己的分支上解决的冲突,并将解决的冲突push推送到远程susu/my-new-feature,再提交合并申请到远程develop

后续处理

第二天早上上班时,先checkout到develop分支,pull一下,再回到susu/my-new-feature上,把本地的develop分支merge到susu/my-new-feature

完成以上步骤后再进行开发是个好的习惯,这样下去就可以避免在一个早就已经被其他人修改过的旧develop版本上进行长期无用的开发,等回过头来合并的时候,发现有大量的冲突需要解决,这就很麻烦了。所以不要闷头写一堆东西后再来进行合并,每天都需要进行一些pull和merge操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,389评论 2 8
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,060评论 4 18
  • Git分支管理 master:主分支,当前分支上的代码随时可以直接发布,并且只能通过Pull Request从其他...
    UEUEO阅读 9,641评论 5 33
  • 前言 大家好!在下游回来了!不啰嗦快进正题!本篇文章是面对刚开始接触Git的新手,所讲命令并不全,在文章结束会放入...
    老匡话Android阅读 3,917评论 -2 18
  • 这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,...
    Sam_Lau阅读 62,406评论 22 328