12

有没有办法建立一个只能合并而不是推入的分支?此外,有什么方法可以在 BitBucket、GitLab 或 GitHub 上运行吗?

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

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

4

2 回答 2

13

是的:它被称为分叉(如GitHub 分叉及其提示BitBucket 分叉GitLab 分叉)。

  • 您有一个只有一个集成商负责的仓库(他/她将合并到目标分支)。
    开发人员无法推送到该仓库。

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

分叉


理论上,您只能使用一个上游 repo,但这需要像gitolite这样的授权层,以保护分支不被推送/合并。 这在 Github(不保护分支)、BitBucket(保护分支,但不防止合并)和 GitLab(与 BitBucket 相同)中不可用。

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

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

Forking + pull request 不只是“git方式”,它确实是集成许多贡献最方便的方式,这就是为什么 git 首先是由 Linus Torvalds 发明的:帮助他每天集成很多补丁他的 Linux 内核。


Tippa Raj提到的“受保护分支”方法(以及我刚才提到的)不是我推荐的方法,因为它会人为地强制执行集中式方法,您需要控制一切:

  • 要保护的树枝
  • 您允许发布的分支:使用一个 repo,开发人员会很想推送他们所有的分支。

由于这个原因,GitHub 不提供受保护的分支.
(实际上,自 2015 年 9 月以来,它确实:请参阅“如何保护 github 中的“master”? ”)
BitBucket 和 GitLab 确实提供了该功能。

单个 repos 还可以通过添加gitolite之类的授权层来管理和保护分支(甚至是文件夹和文件)。

但是,当谈到促进围绕功能分支的协作时,没有什么比拉取请求更好的了。

于 2013-10-14T11:14:51.690 回答
2

除了 Fork 和 Merge,还有另一种方式。

我不确定 Bitbucket 和 Github,但 Gitlab 有一个可以保护分支的功能。因此,除“主用户”之外的任何人都不会对该分支进行推送。所以开发者可以推送到特性分支,然后分支可以被master“主用户”合并到分​​支中

于 2013-10-20T12:58:04.043 回答