为什么 fork 同步有用?

Why fork syncing is useful?

我注意到 BitBucket Server(以前称为 Stash)有一个名为 "fork syncing" 的功能,它允许在 2 个不同的存储库之间自动同步。我看到它的方式就像一个镜像仓库。

该功能有什么用处?

为什么要使用它以及如何使用它?

https://confluence.atlassian.com/bitbucketserver/keeping-forks-synchronized-776639961.html

这听起来像是让你的主存储库的分支自动与上游保持同步。

就我个人而言,这不是一个有用的功能,因为我认为手动执行这些 "pulls" 很重要。

根据 Atlassian 文档:Keeping forks synchronized

Fork syncing helps you to keep your fork in Bitbucket Server up-to-date with changes in the upstream repository. Bitbucket Server can do this automatically for all branches and tags you haven't modified in the fork.

If you have modified branches or tags in the fork, Bitbucket Server will offer syncing strategies. Bitbucket Server will never update your branch or tag in your fork if this means that your changes would be lost.

Note that syncing is about pulling recent upstream changes into your fork, whereas pull requests are about pushing your changes back to the upstream repository.

Github BootCamp 你会发现 fork

的这个定义

A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.

如果 fork 只是一个副本,用于在没有任何原因的情况下对原始 repo 进行实验,那么:Github Help)

Syncing your fork only updates your local copy of the repository.

要了解如何使用分叉同步,首先要考虑工作流程。

如果您的组织使用开发人员对规范存储库具有写入权限的工作流,您可能根本不需要复刻。在这样的组织中,分叉同步可能不会提供很多好处,因为你的分叉(如果有的话)可能只存在于你保留你尚未准备好推送到规范分支的副项目的地方存储库并与您的团队共享。

但是,如果您的组织将对规范存储库的写入权限限制为一组受信任的副手,并且所有开发人员都需要在存储库的分支中完成他们的工作并使用他们的更改打开拉取请求,那就是分叉同步可以带来回报的环境类型。

在这样的环境下,正常的开发流程是三角形的:

  • 从上游存储库获取
  • 为您的更改签出所需的基本分支并对其进行编码
  • 将您的工作推送到分支中的一个分支

此工作流程要求您积极参与 两个 远程存储库以进行任何重要更改。分叉同步的目标是消除这种三角工作流,并允许您以与针对规范存储库本身开发完全相同的方式针对您的分叉进行开发(如果您有权访问的话)。所以这是启用了 fork 同步的工作流程:

  • 从你的分叉中获取
  • 为您的更改签出所需的基本分支并对其进行编码
  • 将您的工作推送到分支中的一个分支

请注意,您永远不需要直接与上游交互,因为随着新工作被推送到规范存储库,您复刻中的分支会自动保持同步。现在的工作流程与您直接在规范存储库中工作时的工作流程相同。

有些人可能想自己获取数据来更新他们的分叉。那也没关系;分叉同步是一项可选功能,因此您可以将其关闭。不过,对我来说,它是我工作流程中不可或缺的一部分。

完全披露:我是 Bitbucket Server 的主要开发人员,也是其分叉同步功能的作者。我在 Bitbucket Server 上使用分支中的分支进行所有开发,分支同步通过分支同步保持最新。