赞
踩
目的:限制本地仓库某一个分支提交代码,只能通过合并代码的方式更新分支代码。(注:合并代码冲突了, 这个必须在该分支提交。此时可以放开限制提交代码)
场景: 开发过程中我们可能会有开发分支和测试分支,因不确定多个需求的上线点是否一致(即使事先确定同一时间点上线也可能因为各种原因导致仅能上线部分功能),会考虑不同的需求放在不同的分支上开发,但为了方便测试,会将不同的需求放在同一分支发布到测试环境。 这个过程中我们就会在不同的开发分支和这个测试分支切换。 为防止后续测试过程中,不小心将bug修复代码写在测试分支,我们就要限制在这个测试分支的提交(本地仓库的提交)。
实现步骤:
1. 找到项目的.git目录,并找到hooks目录, 该目录下有git命令的钩子文件,如下图, 这些钩子文件可以在触发相关命令场景时被调用。
2. 修改相关钩子文件内容,并将.sample后缀去掉。 如我们本次要在提交之前判断分支名称,如果当前分支是禁止提交的分支,则要终止commit操作。
- # 获取当前的分支名称
- branch="$(git rev-parse --abbrev-ref HEAD)"
- # 判断当前分支是否为禁止提交的分支名, 如果是则给出相关提示,并终止commit
- if [ "$branch" = "master" ]; then
- echo "当前分支$branch不支持提交操作, You can't commit to $branch branch"
- exit 1
- fi
3. 如上代码, 我是禁止在master分支上提交代码, 可以提交一次看是否限制住了, 下图为我的测试
4. 至此我们的目的已经达到了,限制在该分支提交代码。但在合并代码时如果出现了代码冲突我们还是要在该分支提交,此时只要修改pre-commit文件名为任意非该名称,让我们修改的文件失效即可。
5. 限制提交解除了。 忙着改bug呢,不小心真的将修复代码提交到了限制分支怎么办? 可以使用cherry-pick命令, 将该提交内容合并到你的开发分支。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。