案例
以hhhh5为例,讲解前端资源发布上线的整个流程。<br /> # clone下仓库,开始开发<br /> $ git clone git@gitlab.****.com:fe/h5.git<br /> # 切换到计划发布的分支版本,格式为 daily/x.y.z<br /> $ git checkout daily/1.0.1<br /> # 开发完成后提交修改代码<br /> $ git add *<br /> $ git commit -m 'feat: 完成了某个新功能'<br /> # 将代码push到gitlab daily环境<br /> $ git push origin daily/1.0.1<br /> # 打publish tag将代码发布到CDN<br /> $ git tag publish/1.0.1<br /> # 也可以使用 git push --tag 命令<br /> $ git push origin publish/1.0.1<br /> 以上步骤可以使用 fie 的命令替代:
# 按规范的格式提交到gitlab<br /> $ fie commit<br /> # 发布到daily环境<br /> $ fie publish d<br /> # 发布到 CDN环境<br /> $ fie publish<br /> assets对应规则
前端资源发布流程说明:
前端代码均托管在gitlab上,通过打 publish tag 发布到CDN环境。<br /> 前端代码均使用非覆盖式发布方式,严禁覆盖式发布方式。<br />发布到CDN时,打的publish tag 必须与 daily分钟版本号一致。比如当前开发的分支是:daily/1.0.1,那边如果需要将该分支发布到CDN,则需要打对应的publish/1.0.1 tag。<br />CDN访问路径与gitlab路径一致。
安装Git
git下载地址:git-scm.com/download
Git的使用流程:
拉取代码 → 开发前更新代码到最新版本 → Coding → 提交代码到仓库
Git配置
设置用户名与邮箱
git config --global user.name " Name"
git config --global user.email "my@email.com"
上面设置命令中带了“–global”参数,是全局配置,影响本机上所有的git项目。也可以对一些单独的项目进行设置,进入要设置的项目目录进行设置:
cd aliyun
git config user.name "Name"
git config user.email "my@email.com"
查看配置:
cat .git/config
创建Git仓库及日常操作
创建git仓库
mkdir project
cd project
git init #在当前的目录下初始化创建git仓库
检出仓库:
git clone 地址
查看远程仓库:
git remote -v
添加远程仓库:
git remote add [name] [url]
删除远程仓库:
git remote rm [name]
git push origin master
修改代码操作
更新本地代码到最新版本:
git fetch
合并更新后的代码到本地:
git merge
更新代码2 (git pull是git fetch和git merge的组合):
git pull
修改代码后,查看已修改的内容:
git diff --cached
将新增加文件加入到git中:
git add file1 file2 file3
所有文件全部加入到git中:
git add .
从git中删除文件:
git rm file1
git rm -r dir1
提交修改:
git commit -m 'new feature - #新功能'
Commit type
bug fix - 组件 bug 修复;
breaking change - 不兼容的改动;
new feature - 新功能
Commit 类型,建议如下:
feat: 新特性
fix: 缺陷修复
docs: 文档相关
style: 样式修改、错别字修改、格式化等
refactor: 重构
perf: 性能提升
test: 增加测试
chore: 业务无关修改,如:发版、构建工具链修改等
提交修改到远程仓库,团队成员就能更新到这些功能
git push <远程主机名> <本地分支名>:<远程分支名>
git分支(branch)
创建sprint分支:
git branch sprint
查看仓库有几个分支:
git branch
//*号为当前所在分支
sprint
* master
切换分支:
//切换到sprint分支
git checkout sprint
查看master分支和sprint分支差异:
git diff sprint
合并sprint分支到master分支:
git merge branchname
删除分支:
git branch -d sprint
如果要删除的分支没有被合并到其它分支中去,那么就不能用“git branch -d”来删除它,需要改用“git branch -D”来强制删除。
将分支推送到远端仓库:
git push origin <branch>
删除远程分支:
git push origin --delete <branch>
打标签(Tag)
git可以对某一时间点上的版本打上标签。如在发布某个软件版本(比如 v0.0.1等),可以打版本标签。
列出已有的标签:
git tag
打标签:
git tag -a v0.0.1 -m 'tag version 0.0.1'
把本地tag推送到远程:
git push --tags
删除tag:
git push origin --delete tag <tagname>
Git 默认大小写不敏感问题:
Git 默认大小写不敏感,现在你本地和远程文件名不一样,Git 能工作,但云构建是 Linux 的,它是大小写敏感的,所以在 liunx 上找不到包了。
git config core.ignorecase false
其它常用命令
显示commit内容:
git log
不仅显示commit内容,同时显示每次commit的代码改变:
git log -p
查看当前仓库的状态:
git status
查看当前分支所有提交者及其次数:
git log | grep "^Author: " | awk '{print $2}' | sort | uniq -c | sort -k1,1nr
“挑拣“ 提交:
git cherry-pick 它会获取某一个分支的单笔提交(比如 fix bug),并作为一个新的提交引入到你当前分支上。
代码回滚:
git revert HEAD
你也可以revert更早的commit,例如:
git revert HEAD^
git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit的sha码
抛弃本地所有的修改,回到远程仓库的状态。
git fetch --all && git reset --hard origin/master
解决修改同一个文件的冲突
rm .git/MERGE_HEAD
重置修改的内容
git reset --hard
查看某一个文件的修改历史:
git blame -L4,4 src/pages/Account/List/components/index.js
查看最新版本和上一个版本的差异(一个^表示向前推进一个版本)
git diff HEAD HEAD^
git取消已经缓存的文件(慎用):
git reset
git恢复删除了的文件
git pull 从git服务器取出,并且和本地修改merge, 类似于SVN up,但是对删除的文件不管用,恢复删除文件用
git checkout -f
Git发布
Gitlab工作流:
Git仓库中master分支(受保护)没有权限直接push。所有的开发都在daily分支上进行。daily分支的命名为daily/x.y.z,其中x.y.z是以数字或者点符号组成的字符串,用来标记版本,如1.2.1 、20180401。
每当开始一个项目,本地启动一个daily/x.y.z分支,在本地分支上进行开发。
本地分支开发完成,需要发布到日常环境测试或者联调时,推送 dayly/x.y.z分支到gitlab。gitlab将通过hook将代码实时发布至日常环境。
联调完成,通过测试,需要最终发布上线时,给 daily/x.y.z分支打标签(又叫做tag或者里程碑) publish/x.y.z。推送该标签到gitlab服务器,做一系列检查后,最后部署文件到CDN。一旦一个daily分支被发布。服务端将删除远程daily分支,并且拒绝再次被推送此版本号。这样做的目的是保证版本号不会重复发布。
修改线上Bug时,需要重新拉出daily分支,并且以新的版本号发布。
将代码clone到本地
git clone {{giturl}}
通过git branch -a
查看远程分支。
如果已经有的话,假如是daily/1.0.0
通过:
git checkout daily/1.0.0
将远程的分支拉到本地
更新分支:
git pull origin daily/1.0.0
daily发布push 一个形如 daily/x.y.z 的分支。如
git push -u origin daily/1.0.0
daily 验证build 目录中的文件将发布到 //g-assets.daily.taobao.net/{group}/{app}/{tag}/。如可重复 push 此预发分支,每 push 一次则发布 daily 一次,路径不变,版本不变。
http://g.assets.daily.taobao.net/git-group/project/x.y.z/***.js
线上发布,push 一个形如 publish/x.y.z 的 tag。如
git tag publish/1.0.0
git push origin publish/1.0.0
线上验证,build 目录中的文件将发布到 http://g.alicdn.com/git-group/git-project/x.y.z/[pageName].j。如
http://g.alicdn.com/git-group/git-project/x.y.z/[pageName].js
版本号尽量遵守Semantic Versioning