Git 配置标准
配置用户名和邮件
为了提交记录便于辨认,配置中文名,邮箱配置成gitlab
注册邮箱
git config --global user.name "中文姓名" git config --global user.email "email@[email.com"
示例
user.name
配置规定: name#工号
示例 git config --global user.name "张三#A00003"
user.email
配置规定: 对立应用公司的邮箱。示例 git config --global user.email "san.zhang@casstime.com"
放弃仓库中以 LF
换行
git config --global core.autocrlf input // 因为linux服务默认应用LF作为换行符格局
参考资料:git core.autocrlf配置阐明
git中文门路名称乱码
git config --global gui.encoding utf-8 git config --global core.quotepath false
让git mergetool
不再生成烦人的备份文件(*.orig
)
git config --global mergetool.keepBackup false
让文件名辨别大小写
git config --global core.ignorecase false
不批改文件模式(文件mode变动不提交到仓库)
git config --add --global core.filemode false
文件重命名不失效(大小写不敏感)时,请应用 git mv
重命名
git mv lineConfig.js LineConfig.js
为了不便您的配置,您能够间接运行以下脚本 git_config_default.sh
# git_config_default.sh# 配置用户名和邮件# 为了提交记录便于辨认,配置中文名,邮箱配置成gitlab注册邮箱# user.name 配置规定: name#工号 示例 git config --global user.name "谭智军#A00015" # user.email 配置规定: 对立应用公司的邮箱。示例 git config --global user.email "zhijun.tan@casstime.com" read -p "请输入您的姓名和工号,示例为:王永林#A00514.输出后请按[enter]键完结。" USER_NAMEgit config --global user.name "$USER_NAME" echo "设置后 user.name 值为 "git config user.name# TODO user.name 合乎正则 [\u4e00-\u9fa5]{2,}#[A-B]\d{5} 才能够持续输出read -p "请输入您在gitlab上注册的公司邮箱,示例为:yonglin.wang@casstime.com.输出后请按[enter]键完结。" USER_EMAILgit config --global user.email "$USER_EMAIL" echo "设置后 user.email 值为 "git config user.email#放弃仓库中以 LF 换行git config --global core.autocrlf inputecho "git config --global core.autocrlf input"#git中文门路名称乱码git config --global gui.encoding utf-8 git config --global core.quotepath falseecho "git config --global gui.encoding utf-8"echo "git config --global core.quotepath false"#让git mergetool不再生成烦人的备份文件(*.orig)git config --global mergetool.keepBackup falseecho "git config --global mergetool.keepBackup false"#让文件名辨别大小写git config --global core.ignorecase falseecho "git config --global core.ignorecase false"#不批改文件模式(文件mode变动不提交到仓库)git config --add --global core.filemode falseecho "git config --add --global core.filemode false"
应用形式如下:
Windows
第一步:把git_config_default.sh
另存到指定的系统目录下;
第二步:在该目录右键 抉择【Git Bash Here】进入Git命令行界面;
第三步:输出以下命令
chmod 777 git_config_default.sh./git_config_default.sh // 执行git_config_default.sh脚本
执行示例如下:
Mac
第一步:把git_config_default.sh
另存到指定的系统目录下;
第二步:在该目录右键 抉择【进入终端】进入Git
命令行界面;
第三步:输出以下命令
chmod 777 git_config_default.sh./git_config_default.sh
示例如下:
Git 提交标准
目标
git commit
信息作为一个根底的交互窗口,既能够疾速确定提交影响、关联设计文档、关联缺点bug
单、后续还能对我的项目或团队工作进行溯源改良。
git commit
信息的规范化,既体现开发同学的业余素养,也属于公司的过程资产,因而对git commit
提交的标准设计如下。
标准
在commit
提交标准中,明确本次提交格局
【提交类型】
明确 一次代码提交的目标。要么是新增性能(feat
),要么是修复bug
(fix
),再者依赖、构建、配置降级、测试代码等等(other
)。
【提交阐明】
明确提交目标后,咱们还须要看看具体内容。通过关键字形容提交详情,更明确的传递提交的价值。
【相干链接】
不便反对接口设计、story
设计、需要、bug
形容等不同类型代码提交的需要,咱们同时反对JIRA
、confluence
链接。
为了方便使用,咱们采纳Angular
标准,如下:
git提交标准标准阐明 提交类型(必须): feat(新增性能) fix(修复bug) other(依赖,构建、CI、格局等,可通过提交信息阐明) 提交阐明 (必须):形容此次提交所批改的内容(长度限度2~100, 约定阐明中不要蕴含"[]", 会影响校验规定) 相干链接 (必须):Jira 链接或 Confluence 链接 标准格局 提交类型: 提交阐明 [相干链接] 提交示例 feat: git提交标准阐明 [https://jira.casstime.com/EC0001]
对于标准的常见问题
问题1:story
编写或者公布阶段没有jira
,强制jira
编号的不晓得如何填写,只能提前创立Jira
针对这个问题,咱们和开发同学进行了沟通,咱们把之前强制要求填写jira
编号 改成了强制要求填写相干链接,这样在story
设计阶段能够填写 story
的confluence
地址, 公布阶段可填写checklist
地址。
问题2:提交类型太少,不晓得如何抉择,比如说以下场景,批改ci
, 正式版本打包,调整代码格局,代码重构,性能优化等等
针对这个问题 ,咱们还是保持不减少新的类型,然而把原来的refactor
批改为other
。
- 不减少提交类型的起因
一个起因为了束缚提交时的代码完整性,咱们举荐的是一次提交对应的一个具体的story
性能,不举荐一个性能呈现屡次提交的状况 ,如果类型给的太多,那么我随便批改一次代码的时候,就能够有对应的类型来抉择,代码完整性上就没有约束性。另一个起因也是越简略越容易了解,每个人都有本人的了解,比如说,我批改了一个pom
的版本从新打包,然而当初类型有 ci
和 build
,那这个场景该如何抉择,置信有人会认为是ci
,也有人会认为是build
- 提交类型如何抉择
针对代码重构,性能优化这2个场景没有类型,从迭代的角度说,这2个场景也是属于减少新性能或者修复bug
,因为做2个工作的时候,必定是须要对应的story
或jira
来跟踪。 可能的确会存在一些场景须要非凡调整,然而个别这种场景都是低频的,抉择other
,加上对应的形容即可,大家也能够了解为合乎angular
提交的那些类型当初变成了子类型,只是说这个子类型是放到了形容当中
校验
此节次要是形容现有工程项目如何集成commit-msg hook
对Commit
信息进行验证。初步想法是利用git
的hooks
来进行验证,当执行git commit
命令后,便会主动触发此hook
,而后对提交的commit
信息进行格局的验证。
小提示
Git Hook
大抵分为两种,一个在服务端,一种放在本地。其中,本地的hook
不受版本控制器的治理,也就是说咱们没方法把写好的hook
脚本放在.git/hooks
上面,而后推送到仓库,供小伙伴们下载、应用(除非本人将hook
文件手动复制到我的项目的./git/hooks
目录下)通过对
gerrit
代码审核平台的剖析,咱们曾经解决了须要开发同学手动执行命令下载commit-hooks
的问题,对如何解决这个问题的同学可参考上面:
gerrit
如何替换默认的commit-hook
文件
如何集成咱们自定义hook
进行提交信息查看上,并且让开发同学什么都不必做便可获取到咱们提供的标准查看hooks
?起初遇到了很多问题,命令行、插件形式都进行过尝试,然而都没有很好的解决这个问题,还是须要开发同学手动执行才行,为了很好的解决这个问题,
咱们首先在gerrit
代码审核平台上clone
一个工程的命令:
clone工程命令## SSH形式git clone "ssh://a00514@gerrit.casstime.net:29418/open/icec-cloud-job" && scp -p -P 29418 a00514@gerrit.casstime.net:hooks/commit-msg "icec-cloud-job/.git/hooks/"## HTTP形式git clone "http://a00514@gerrit.casstime.net:8087/a/open/icec-cloud-job" && (cd "icec-cloud-job" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg http://a00514@gerrit.casstime.net:8087/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)## ANONYMOUS HTTP形式git clone "http://gerrit.casstime.net:8087/open/icec-cloud-job" && (cd "icec-cloud-job" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg http://gerrit.casstime.net:8087/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
能够看到,命令被分为了2个局部,一个局部是执行clone
代码操作, 一个局部是执行下载gerrit
提供hooks
操作,由此可知,gerrit
是提供了默认的commit-hook
文件的,咱们只有对其进行替换即可。
基于以上的剖析,咱们做了以下的操作步骤
注:文档中的lib
地位是谬误的,真正须要替换是截图中的lib
包,替换实现重启既可, 不须要执行初始化等步骤
操作步骤
小提示 (前端开发同学留神)
git
提交标准试行的过程中,前端工程的如同是集成了一个husky
插件,笼罩了工程.git/hooks
下的文件,针对这个状况,前端这边的工程,由SE
本人决定是持续应用husky
插件 或者 应用咱们举荐的形式
1、如果是还未clone
的工程,失常clone
工程即可,其它的什么都不必做,咱们曾经替换了gerrit
默认的commi-hook
文件,校验文件会随clone
命令主动克隆到工程的.git/hooks
目录下。
2、如果是在git
提交标准标准推广之前曾经clone
到了本地的工程,则须要本人手动执行命令下载commit-hook
,命令如下
hook下载命令
# 如果clone的我的项目是gerrit我的项目,则执行此命令curl -Lo .git/hooks/commit-msg http://10.2.43.24:3311/commit-msg # 如果clone的我的项目是gitlab我的项目,则执行此命令curl -Lo .git/hooks/commit-msg http://10.2.43.24:3311/commit-msg-nogerrit
3、执行后,关上我的项目.git/hooks
目录下的commit-msg
文件,如果看到以下信息,阐明曾经胜利下载了commit-hook
示例
模仿一个不符合规范的提交,当执行commit
动作后,会提醒不符合规范,而后在控制台输入相应的提交标准阐明
- 示例1:模仿命令行提交不通过
- 示例2:模仿
IDEA
提交不通过