git - BitBucket/GitLab/GitHub 上的仅 merge 分支?

标签 git bitbucket git-merge git-flow

有没有办法设置一个分支,使其只能被 merge ,而不是被 push ?此外,有什么方法可以在 BitBucket、GitLab 或 GitHub 上运行吗?

我们处理功能分支,将它们推送到 BitBucket/GitLab/GitHub(取决于项目),然后将它们 merge 到名为“开发”的集成分支中。我想阻止人们直接 push “发展”。

BitBucket 有一种限制对分支的访问的方法,但它也阻止人们也能够进行 merge 请求。

最佳答案

是的:它叫做 forking (如 GitHub forkits tipsBitBucket forkGitLab fork)。

  • 您有一个代码库,其中只有一名集成员负责(他/她将 merge 到目标分支)。
    开发人员无法推送到该存储库。

  • 您有“分支 repo ”,您可以从那里向原始 repo 发出 pull 请求:贡献者可以推送他们想要的任何分支,然后(从那个推送的分支)将请求 pull 到原始仓库的目标分支。

forking


理论上,您只能使用一个 upstream repo ,但这需要 authorization layer喜欢gitolite为了保护分支免受推送/merge 。
这在 Github(不保护分支)、BitBucket(保护分支,但不防止 merge )和 GitLab(与 BitBucket 相同)中不可用。

这就是为什么使用多个上游存储库更容易:一个原始存储库和一个或多个分支。

GitHub/BitBucket/GitLab 围绕 pull 请求有一个很好的界面,将它们与评论联系起来,促进沟通和讨论围绕特定的 pull 请求。

Forking + pull request 不仅仅是“git 方式”,它确实是整合许多贡献的最便捷方式,which is why git was invented by Linus Torvalds in the first place : 帮助他每天为他的 Linux 内核集成很多补丁。


“ protected 分支”方法 mentioned通过 Tippa Raj (以及我在上面提到的)不是我推荐的方法,因为它会人为地实现集中方法,您需要控制一切:

  • 要保护的 Twig
  • 您允许发布的分支:对于一个存储库,开发人员会很想推送他们的所有分支。

出于这个原因,GitHub 不提供 protected 分支
(实际上,自 2015 年 9 月起,它确实存在:参见“How to protect “master” in github?”)
BitBucket 和 GitLab 确实提供了该功能。

通过添加一个 authorization layer,单个存储库还可以管理和保护分支(甚至文件夹和文件)喜欢gitolite .

但在促进围绕功能分支的协作方面,没有什么比 pull 请求更好的了。

关于git - BitBucket/GitLab/GitHub 上的仅 merge 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119030/

相关文章:

git cherry 采摘到不同的基本目录

Git merge 与在本地和源上添加的 500 个文件发生冲突

git - 由于 "curl 56 failure",无法从远程克隆 Git 存储库?

svn - "git svn fetch"失败,ls-tree 因缺少树对象而死亡

用于远程开发的数据库同步

git - 从提交和标记生成变更日志

git - 为什么 merge 删除后Git特性分支仍然可见?

git - 使用 Github Action 更新 README 失败

mercurial - scp 一个 mercurial 存储库

git - 多个开发人员处理同一任务的正确 git 工作流方案