起因
日常Coding使用git的一个问题是,公司工作和个人项目有时候会使用不同的用户信息,例如公司项目要求个人信息必须为your_name@your_company.com
的形式,而你自己在使用Gmail
,这里自然有些冲突,如果忘记在clone的项目中配置一下,极有可能会把自己的日常使用邮箱提交到公司的repo中,反之亦然。
虽然git本身可以通过--global
进行配置,日常使用上使用都用自己的常用个人信息,但是公司项目每次都要单独配置也是做了太多无用功,那么如果能让这个任务更加自动化想必是可以提高工作效率的。
方案
解决的思路决定采用git
的hooks
进行处理,在每一次的commit
操作前触发,判断当前项目的远端仓库url是否为公司url,若为公司url则修改当前项目目录下的git用户信息,即:
具体匹配操作运用了shell
与AWK
的结合,个人感觉AWK
在匹配以及字符串处理上更胜一筹,主要逻辑利用AWK
完成。
主要逻辑如下:
其中通过awk的exit值向shell传递信息,通知当前状态,若修改完成,提示用户重新进行commit操作。
使用
在GitHub
上获取代码后,根据实际情况配置好匹配规则以及用户信息,将hook文件置入git安装目录下的/share/git-core/templates/hooks/
之下,并chmod +x
赋予执行权限,如在mac上通过homebrew安装的git,则会在类似:
目录下。
最后还需要指定项目的默认init模板目录,例如:
后续clone的项目都能起到效果了。
参考文档
参考了 @liaohuqiu
大大的博客文章git: 提交前强制检查各个项目用户名邮箱设置
,同时修改了相关项目
的代码,感谢!
TODO
在脚本中尝试帮助用户完成提交操作。