gogs禁止强制更新git push -f配置方法

gogs禁止强制更新git push -f配置方法

703发表于2019-07-13

git使用者的知道一个黄金法则:

千万不要在共用分支上使用git push -f强制提交代码到远程仓库。

直接使用git push -f 强制将本地的修改会覆盖远程仓库的版本,将其他人的commit都给冲掉了,而且无法使用通常的git reset方式回滚,因为使用 git log查看远程仓库的提交历史已经没有其他同事在这之前提交的commit记录了。

所以远程仓库最好是禁用这个提交代码。下面说说gogs要配置。

一、远程仓库配置

找到远程仓库对应config文件。我的目录:D:\git\Gogs\data\repositories\2351310751\test190709.git

from clipboard

添加如下内容:

[receive]
denyNonFastForwards = true
from clipboard

如果已经有[receive]节点,直接加下面代码就行了。

denyNonFastForwards = true

二、重启gogs服务

from clipboard

三、测试效果

为了方便在一台机器上模拟两个用户提交代码。clone两次最新代码到两个目录。

目录A=》K:\test190709

目录B=》F:\test190709

1、在目录A中添加一个文件“log6.txt”,然后提交,push。

from clipboard

2、在目录A中添加一个文件"新建文本文档 - 副本 - 副本 - 副本.tx",然后提交。

from clipboard

这个时候尝试push。

from clipboard

会报错:

To http://localhost:3000/2351310751/test190709.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'http://localhost:3000/2351310751/test190709.git'

因为远程仓库在上一次获取到现在这段时间,有人已经push了代码上去,那我们试试强制提交呢?

$ git push origin -f

from clipboard

可以看到是不能成功的。

那么要提交办呢?先获取代码再push。

git pull

git push origin

from clipboard


ps:除此之外,还可以通过“派生” fork一个自己的远程仓库,然后通过pull来提交和并代码的方式。


分支限制不能通过push直接提交(不分配可写入的用户),其他人只能通过pull来合并代码,这样可以达到保护分支的作用。

gogs使用体验fork派生,pull request功能


小编蓝狐