配置github(企业)存储库以仅允许快速前进提交/ PR合并?

mac*_*mac 5 git continuous-integration github pull-request

从gerrit到github,我缺少一个主要功能,即仅允许快速向前合并。从本质上讲,我认为,如果您要在陈旧的master分支上进行更改,则任何类型的“ CI构建签名”都是没有用的。

我想知道是否有任何方法可以在(企业)github中配置它?是否有任何设置或其他技巧,除非分支被正确地重新设置,否则不允许用户按下github中的“合并拉取请求”按钮?

最好,我什至想补充一点,它还应该检查PR中的所有提交是否都被压缩(除非PR仅包含一个提交,否则PR无法合并)。

因此,完美的解决方案:只允许具有单个提交且先前已重新定基础的PR合并。

glo*_*bia -2

我认为你可以在 git 配置文件中添加一个命令来仅强制快进。您可以在本地(即特定于存储库的)git 配置文件或全局 git 配置文件上执行此操作。

要修改本地 git 配置文件,请在终端中输入以下内容(从 gi​​t 存储库中):

git config --add branch.master.mergeoptions --ff-only

或者使其全局化,即应用于您计算机上的所有 git 项目

git config --global --add branch.master.mergeoptions --ff-only

运行上述命令的结果是将以下内容添加到您的 git 配置文件中(所以您当然可以手动添加它)

[branch "master"] mergeoptions = --ff-only

全局 git 配置文件通常位于~/.gitconfig,存储库特定的 git 配置文件通常位于name_of_repo/.git/config

我还没有实际尝试过。让我知道它是否适合您。

我不确定如何强制执行一次提交。我曾工作过一个地方,它所做的正是你所描述的,仅快进且仅 1 次提交。您最终会得到一个很好的线性历史记录,但它确实会减慢开发速度,特别是对于超过 2 人的开发团队。稍微更灵活的方法可能是要求人们执行以下操作。

从您的开发分支(因为变基使历史记录不同步,所以需要强制): git pull git rebase origin/master git push --force

验证您的测试是否已通过,然后:

git checkout master git merge <name_of_branch> --squash git push

如果您想为每次提交到 master 提供一个版本,您也可以将合并标记为 master,即也执行以下操作:

git tag <tag_number> git push --tag