标签归档:Hooks

git根据仓库url修改用户信息

起因

日常Coding使用git的一个问题是,公司工作和个人项目有时候会使用不同的用户信息,例如公司项目要求个人信息必须为your_name@your_company.com的形式,而你自己在使用Gmail,这里自然有些冲突,如果忘记在clone的项目中配置一下,极有可能会把自己的日常使用邮箱提交到公司的repo中,反之亦然。

虽然git本身可以通过--global进行配置,日常使用上使用都用自己的常用个人信息,但是公司项目每次都要单独配置也是做了太多无用功,那么如果能让这个任务更加自动化想必是可以提高工作效率的。

方案

解决的思路决定采用githooks进行处理,在每一次的commit操作前触发,判断当前项目的远端仓库url是否为公司url,若为公司url则修改当前项目目录下的git用户信息,即:

具体匹配操作运用了shellAWK的结合,个人感觉AWK在匹配以及字符串处理上更胜一筹,主要逻辑利用AWK完成。

主要逻辑如下:

其中通过awk的exit值向shell传递信息,通知当前状态,若修改完成,提示用户重新进行commit操作。

使用

GitHub上获取代码后,根据实际情况配置好匹配规则以及用户信息,将hook文件置入git安装目录下的/share/git-core/templates/hooks/之下,并chmod +x赋予执行权限,如在mac上通过homebrew安装的git,则会在类似:

目录下。

最后还需要指定项目的默认init模板目录,例如:

后续clone的项目都能起到效果了。

参考文档

参考了 @liaohuqiu 大大的博客文章git: 提交前强制检查各个项目用户名邮箱设置,同时修改了相关项目的代码,感谢!

TODO

在脚本中尝试帮助用户完成提交操作。