一、原因分析及解决办法

Git作为一款优秀的代码管理工具,受到广大程序员的喜爱。公司也一直使用git维护代码,发生问题的工程已经使用一年多,中间没有出现过任何问题。今天去修复一个线上的bug,在push代码的时候出现以下错误信息:

From git.xxx.cn:biz/id-maker
 * branch            release_1.0.0 -> FETCH_HEAD
 = [up to date]      release_1.0.0 -> origin/release_1.0.0
13:16:33.304: [id-maker] git -c credential.helper= -c core.quotepath=false -c log.showSignature=false push --progress --porcelain origin refs/heads/release_1.0.0:release_1.0.0 --tags
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.        
error: failed to push some refs to 'git@git.xxx.cn:biz/id-maker.git'

报错的信息很长,我们要捡重要的语句来分析:

You are not allowed to push code to protected branches on this project.

翻译过来就是:你没有被允许push代码到这个工程的某个分支上。言下之意,我没有push代码到这个分支上的权限。

知道了原因,问题就解决一半,剩下的一半就是要找到解决的办法。通过万能的搜索引擎成功找到解决办法:

设置路径:setting -> Repository -> protect branch,找到分支后解决的办法有两个:

1、重置push的权限。
2、删除该条设置,一劳永逸。

两种办法任选一种都能够达到目的,不过为么会出现protect branch 这个机制呢?原因在于保护某个分支的稳定,不让普通开发或者别的开发污染特定分支(特别是分布分支)或者自己的分支。

扩展知识

上面我们谈到,git提供 protect branch 机制是为了保护某个分支的稳定,那么我们日常开发中在什么情况下会用到呢?

1、特定的人才有权限把代码合并到发布分支,这是为了发布包的稳定。
2、自己的分支不让别人合并进来,有助于保护自己的代码分支不被污染。
3、开发部分人只有读取代码的权限,没有push权限,防止不小心污染代码逻辑。

以上的机制和git 提供的push request 机制类似,后者也是用来保护自己仓库代码的整洁,稳定。