AI 文摘

GitWorkflow学习(四)





作者: WetWan 来源: WetWan

下面继续介绍分叉工作流(forking workflow)。原文见文后链接。

分叉(Forking)工作流与其他流行的 Git 工作流有着根本的不同。它不是使用单个服务器端存储库作为“中央”代码库,而是为每个开发人员提供自己的服务器端存储库。这意味着每个贡献者不是一个,而是两个 Git 存储库:一个私有的本地存储库和一个公共服务器端存储库。分叉工作流最常见于公共开源项目 中。

分叉工作流的主要优点是可以集成贡献,而无需每个人都推送到单个中央存储库。开发者推送到自己的服务器端仓库,只有项目维护者才能推送到官方仓库。这允许维护者接受来自任何开发人员的提交,而无需授予他们对官方代码库的写入权限

分叉工作流通常遵循基于Gitflow工作流的分支模型。这意味着完整的功能分支将用于合并到原始项目维护者的存储库中。其结果是一个分布式工作流,为大型团队(包括不受信任的第三方)提供了一种灵活的方式来安全地进行协作。这也使其成为开源项目的理想工作流程。

工作方式

与其他Git工作流一样,分叉工作流从存储在服务器上的官方公共存储库开始。但是当新开发人员想要开始处理项目时,他们不会直接克隆官方存储库。

取而代之的是,他们分叉官方存储库以在服务器上创建它的副本。这个新副本作为他们的个人公共存储库——不允许其他开发人员推送到它,但他们可以从中提取更改(我们稍后会看到为什么这很重要)。创建服务器端副本后,开发人员将执行git clone 将其副本获取到本地计算机上。这是他们的私有开发环境,就像在其他工作流中一样。

当他们准备好发布本地提交时,他们会将提交推送到他们自己的公共存储库,而不是官方存储库。然后,他们向主存储库提交拉取请求PR,让项目维护者知道更新已准备好集成。如果贡献的代码存在问题,拉取请求还可以用作方便的讨论线程。以下是此工作流的分步示例。

  1. 开发人员“fork”一个“官方”服务器端存储库。这将创建自己的服务器端副本。

  2. 新的服务器端副本将克隆到其本地系统。

  3. “官方”存储库的 Git 远程路径将添加到本地克隆中。

  4. 创建一个新的本地功能分支。

  5. 开发人员对新分支进行更改。

  6. 为更改创建新提交。

  7. 分支被推送到开发人员自己的服务器端副本。

  8. 开发人员打开从新分支到“官方”存储库的拉取请求。

  9. 拉取请求被批准合并,并合并到原来的服务器端仓库中

为了将该功能集成到官方代码库中,维护者将贡献者的更改拉入(pull)他们的本地存储库,检查以确保它不会破坏项目,将其合并到他们的本地main 分支中,然后将main 分支推送到服务器上的官方存储库。贡献现在是项目的一部分,其他开发人员应该从官方仓库中提取以同步他们的本地仓库。

重要的是要了解,分叉工作流中的“官方”存储库的概念只是一种约定。事实上,唯一让官方仓库如此官方的是它是项目维护者的公共仓库。

分叉 vs 克隆

需要注意的是,“分叉”存储库和“分叉”不是特殊操作。分叉存储库是使用标准git clone 命令创建 。分叉存储库通常是“服务器端克隆”,通常由第三方 Git 服务管理和托管。没有专门的Git命令来创建分叉存储库。克隆操作实质上是存储库及其历史记录的拷贝。

分叉工作流中的分支

所有这些个人公共存储库实际上只是与其他开发人员共享分支的便捷方式。每个人都应该仍然使用分支来隔离单个功能,就像在功能分支工作流和Gitflow工作流。唯一的区别是这些分支的共享方式。在 Forking Workflow 中,它们被拉送到另一个开发人员的本地仓库中,而在 Feature Branch 和 Gitflow Workflows 中,它们被推送到官方仓库。

Fork 存储库

所有 Forking Workflow 项目的新开发人员都需要对官方存储库进行 fork。如前所述,分叉只是一个标准git clone 操作。可以通过 SSH 连接到服务器并运行git clone 以将其复制到服务器上的其他位置来执行此操作。流行的 Git 托管服务(如 Bitbucket)提供自动执行此步骤的存储库分叉功能。

克隆你的分叉仓库

假设使用 Bitbucket 来托管这些存储库,项目的开发人员应该拥有自己的 Bitbucket 帐户,并且他们应该使用以下命令克隆存储库的分叉副本:

git clone https://[email protected]/user/repo.git  

添加远程仓库

其他 Git 工作流使用指向中央存储库的单个源远程,而分叉工作流需要两个远程,一个用于官方存储库,一个用于开发人员的个人服务器端存储库。虽然您可以随心所欲地调用这些远程,但常见的约定是将 origin 用作分叉存储库的远程(这将在您运行git clone 时自动创建)和官方存储库的上游。

git remote add upstream https://bitbucket.org/maintainer/repo  

您需要使用上述命令自行创建上游远程。这将使你轻松地在官方项目的进展过程中保持本地存储库的最新状态。请注意,如果您的上游存储库启用了身份验证(即它不是开源的),则需要提供用户名,如下所示:

git remote add upstream https://[email protected]/maintainer/repo.git  

这要求用户在克隆或从官方代码库中提取之前提供有效的密码。

在分支中工作:提交和推动更改

在开发人员的分叉存储库的本地副本中,他们可以编辑代码、提交更改和创建分支,就像在其他 Git 工作流中一样:

git checkout -b some-feature   
# Edit some code   
git commit -a -m "Add first draft of some feature"  

他们的所有更改都将是完全私有的,直到他们将其推送到他们的公共存储库。而且,如果官方项目已经向前推进,他们可以通过git pull 访问新的提交:

git pull upstream main  

由于开发人员应该在专用的功能分支中工作,因此这通常会导致快速向前(fast-forward)合并。

发出拉取请求

一旦开发人员准备好分享他们的新功能,他们需要做两件事。首先,他们必须通过将他们的贡献推送到他们的公共存储库来使其他开发人员可以访问他们的贡献。他们的orgin remote应该已经设置好了,所以他们应该做的就是以下几点:

git push origin feature-branch  

这与其他工作流的不同之处在于,origin远程指向开发人员的个人服务器端存储库,而不是主代码库。

其次,他们需要通知项目维护者,他们希望将他们的功能合并到官方代码库中。一般第三方服务商会提供了一个“拉取请求”按钮,该按钮会指向一个表单,要求您指定要合并到上游官方存储库中的分支。通常,您需要将feature 分支集成到上游远程的main 分支中。

总结

总而言之,分叉工作流通常用于公共开源项目。分叉是在项目存储库的服务器副本上执行git clone 的操作。分叉工作流通常与 Bitbucket 等 Git 托管服务结合使用。分叉工作流的一个高级示例是:

  1. 您想为托管的bitbucket.org/userA/open-project 开源库做出贡献

  2. 使用 Bitbucket,您可以fork存储库的分叉bitbucket.org/YourName/open-project

  3. 在本地系统上执行对https://bitbucket.org/YourName/open-project 的git clone 操作以获取存储库的本地副本

  4. 在本地存储库中创建一个新分支feature

  5. 完成新功能开发,并执行git commit 以保存更改

  6. 然后你将新feature 分支推送到远程分叉存储库

  7. 使用 Bitbucket,您可以针对origin存储库bitbucket.org/userA/open-project 打开新分支的PR拉取请求

分叉工作流可帮助项目的维护者向任何开发人员的贡献开放存储库,而无需手动管理每个贡献者的授权设置。这为维护者提供了更多的“拉动”式工作流程。分叉工作流最常用于开源项目,也可以应用于私有业务工作流,以便对合并到发布中的内容进行更权威的控制。这在具有部署管理器或严格发布周期的团队中非常有用。

资料来源

  1. https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具