怎样防止同事用 QQ 邮箱提交公司代码?

怎样防止同事用 QQ 邮箱提交公司代码?

文章资讯开源世界2021-07-15 10:03:332830A+A-

事情是这样的,最近组里新建了一个代码仓库来开发一个新的产品,再加上今天北京下大雨很多同事选择在家工作(包括我也是),于是我就选择用自己的个人电脑来工作。

但我的个人电脑里面的 Git 信息是用的我自己的个人邮箱:

git config --global user.name "Germey" git config --global user.email "cqc@cuiqingcai.com"  复制代码

这两行命令大家用过 Git 的肯定都敲过对吧?

这个配置是全局生效的,所以如果我用 Git 的 commit 命令来提交代码的话,那么 commit 的名字和邮箱就会变成刚才我配置的个人信息。

然后如果把代码推送到公司的代码仓库里面,里面就会出现一个奇奇怪怪的用户名和头像,就像这样子:

怎样防止同事用 QQ 邮箱提交公司代码?  新闻 第1张

图中上面两次 commit 就是我用个人电脑提交的,最后的那次 commit 是我上周在公司用公司电脑提交的。

这是不是很奇怪?

如果其他人也用的个人邮箱提交,那公司代码库里面就会出现各种怪怪的提交人的记录,无从知晓。

这肯定不能忍啊,以后要是有谁写了奇怪的代码都不好查是谁写的。

于是乎,我灵机一动,想:为何不在提交代码的时候做一个限制呢?

能做到吗?当然可以!

Git Hook

这里就介绍一个知识点 - Git Hook,它的意思就是在 Git 各种事件执行前和执行后执行一些自定义的逻辑,比如说,我们定义一个 pre-commit 的 Git Hook,那就能在 commit 之前执行一些操作,我们定义一个 post-push 的 Git Hook,那就能在 push 操作之后执行一些操作。

有关具体的内容可以参考官方文档:git-scm.com/book/en/v2/…

好,那这里我其实就是需要在 commit 之前做一下 Git 信息检查就好了,比如检查配置的邮箱不是工作邮箱,那就不允许执行 commit,所以就不会出现奇奇怪怪的 commit 记录了。

实操

说干就干。

配置 Git Hook 的工具有很多,Git 有原生支持,当然我们也可以用第三方库来做。

目前我们的代码仓库是基于 Node.js 开发的,所以 Node.js 的项目配置 Git Hook 比较流行的解决方案就是 husky,所以这里我也用 husky 来做了。

首先安装下 husky:

yarn add husky 复制代码

然后配置一个 Node.js 的 prepare 命令,这个命令可以在装完包 Node.js 包之后自动执行,所以 prepare 命令就配置成 husky 初始化的脚本,package.json 里面增加如下配置:

{   "scripts": {     ...     "prepare": "npx husky install"   }, } 复制代码

OK,这样的话,其他人如果 clone 了这个仓库,装完所有 Node.js 包之后就会自动初始化 husky 的配置,然后在项目本地生成一个 .husky 的初始化目录,这样 Git Hook 就生效了。

Git Hook 生效之后,所有定义在 .husky 目录下的 Hook 脚本都会被应用,比如如果在 .husky 目录下添加一个 pre-commit 的脚本,那执行 commit 的之前,该脚本就会被预先执行做一些检查工作。

所以 .husky 目录下我就创建了一个 pre-commit 的脚本,写入了如下内容:

EMAIL=$(git config user.email) if [[ ! $EMAIL =~ ^[.[:alnum:]]+@microsoft\.com$ ]]; then   echo "Your git information is not valid";   echo "Please run:"   echo '   git config --local user.name "<Your name in Microsoft>"'   echo '   git config --local user.email "<Your alias>@microsoft.com"'   exit 1; fi; 复制代码

这是一个 Linux Shell 脚本,完全遵循 Shell 语法。

这里其实就是获取了 git config user.email 的返回结果,然后用正则表达式匹配是否符合公司邮箱格式,比如我们公司邮箱后缀当然是 microsoft.com 后缀,所以这里就用了 ^[.[:alnum:]]+@microsoft\.com$ 来进行匹配了。这里值得注意的是,为什么这里没有用 \S 来代表非空白字符,而是用了一个 [:alnum] 呢?这是因为 Bash Shell 本身不支持 \S 这种匹配,所以这里得换成 [:alnum]

然后如果不匹配怎么办呢?

那就输出一些错误提示就好了,比如这里就提示请使用 git config —-local  命令来配置用户名和邮箱,之所以用-—local 是因为不想该配置影响全局的 Git 配置,所以这个配置只针对该仓库生效,然后 exit 1 就触发异常退出,程序运行终止,从而也不会触发 commit 命令了。

有了这个配置,我们来尝试下效果。

这会我没有做任何修改,Git 还是原来的配置,即我的全局个人邮箱配置。

这时候我执行下 commit 命令,就出现错误提示了:

Your git information is not valid Please run:    git config --local user.name "<Your name in Microsoft>"    git config --local user.email "<alias>@microsoft.com" 复制代码

很棒!检测出来了。

按照这个提示说的,然后我运行下配置命令:

git config --global user.name "Qingcai Cui" git config --global user.email "xxxx@microsoft.com"  复制代码

这里呢,我就配置了我的公司个人信息和公司邮箱。

然后重新再执行 commit 命令,就不会再出现如上的错误提示了!commit 成功!

大功告成!!!

有了它,我们就可以成功阻止一些奇奇怪怪的 commit 乱入公司的代码仓库了!

然后我把这个 PR 发出去了,有同事似乎也是深有感触,说道:

怎样防止同事用 QQ 邮箱提交公司代码?  新闻 第2张

哈哈哈,有了这个,以后我们应该再也不会看到我们的代码仓库里面有 QQ 邮箱啦!

希望对大家有帮助~


作者:崔庆才丨静觅
链接:https://juejin.cn/post/6984398387659407374
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Copyright 百搜科技 版权所有 精品源码推荐:http://github.crmeb.net/u/defu
#转载请注明出处!

点击这里复制本文地址 以上内容由开源世界整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

开源世界-开源独尊-开源中国-ThinkPHP-CRMEB-商城源码-项目下载站-CMS企业模板-互站网-悟空源码-A5资源网-CSDN-ASP300 © All Rights Reserved.  Copyright 开源世界 版权所有
Powered by 百搜科技 Themes by www.baisou.ltd
联系我们| 关于我们| 留言建议| 网站管理

分享:

支付宝

微信

嘿,欢迎咨询
请先 登录 再评论,若不是会员请先 注册