有没有办法设置一个分支,使其只能被 merge ,而不是被 push ?此外,有什么方法可以在 BitBucket、GitLab 或 GitHub 上运行吗?
我们处理功能分支,将它们推送到 BitBucket/GitLab/GitHub(取决于项目),然后将它们 merge 到名为“开发”的集成分支中。我想阻止人们直接 push “发展”。
BitBucket 有一种限制对分支的访问的方法,但它也阻止人们也能够进行 merge 请求。
最佳答案
是的:它叫做 forking (如 GitHub fork 和 its tips、BitBucket fork 和 GitLab fork)。
您有一个代码库,其中只有一名集成员负责(他/她将 merge 到目标分支)。
开发人员无法推送到该存储库。您有“分支 repo ”,您可以从那里向原始 repo 发出 pull 请求:贡献者可以推送他们想要的任何分支,然后(从那个推送的分支)将请求 pull 到原始仓库的目标分支。
理论上,您只能使用一个 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/