git 工作流总结

之前开的坑来补。

如何利用 Git 的团队协作是个问题,处理不好会让工作事倍功半。

我在学习的过程中了解到了4种 Git 团队协作的方式。

1.中心化工作流
2.基于功能分支的工作流
3.Gitflow 工作流
4.Fork 工作流

中心化工作流

中心化工作流将中央仓库作为项目中所有修改的唯一入口。这种工作流不需要 master 之外的其他分支。

如何工作

开发者将中央仓库 clone 到本地后开始工作。在他们的本地仓库中,可以修改文件和提交更改,但是,所有新的提交都保存在本地,和中央仓库完全隔离。开发者可以将 upstream 的同步推迟到他们方便的时候去做。


git 工作流总结_第1张图片

管理冲突

在开发者发布功能之前,需要先 fetch 更新到最新到中央仓库,在它们之上 rebase 自己到更改。 这样的优点是可以留下完美的线性历史。

这套协作方式对于 SVN 的使用团队来说很棒,但是没有用到 Git 分布式的优点。


git 工作流总结_第2张图片
image.png

Feature 分支工作流

当你熟练使用 Git 之后,在你的开发流程中添加功能分支是一个非常能促进团队协作的方式。
这种工作流的好处是,多个开发者专注自己的功能而不会打扰中央仓库。还能保证 master 分支永远不会包含质量有问题的代码,给持续集成环境带来了很大好处。

封装功能的开发方式使得 Pull Request 的使用更加方便。它可以在开发者在功能并入项目之前一起参与讨论,提出问题,或者寻求建议。

如何工作

Feature 分支工作流同样使用中央仓库的概念,master 分支代表官方的项目历史。开发者每次进行新的工作时,创建一个新的分支,该分支名称应为描述功能或者针对某一 issue 。
feature 分支也应该被推送到中央仓库。这使得你和其他开发者共享这个功能,而又不会改变官方代码。


Pull Request 是分支工作流里非常便利的工具,有人如果完成了一个功能,他们不会立刻并入master。他们将 feature 分支推送到中央仓库发布一个 Pull Request 。这样可以在并入主代码库之前让所有其他开发者审查代码。Pull Request 也是一个讨论板块,任何人遇到问题需要帮助时可以发起一个 Pull Request 让其他开发者看到。

GitFlow 工作流

GitFlow工作流相比功能分支工作流没有增加新的概念,它给不同的分支制定的不同的功能,严格定义了它们应该怎样以及何时进行交流。

开发分支

对于一个开发人员来说,开发分支是打交道最多的分支。每增加一个功能,就在开发分支的基础上新建一个功能分支,每当功能开发完成时,它会杯合并会开发分支。功能分支 永远不应该跟 master 交互。

发布分支

一旦 开发分支的新功能开发到一定程度(deadline 或者 其他原因),你可以从 开发分支 fork 出来一个分支发布。这个分支的创建开始了下一个发布周期。只有和发布有关的工作应该在词分支上进行。

发布完成后,发布分支将合并进 master,并打上版本号标签。另外也应该合并回 develop ,后者可能在发布启动后又有了新的改动。

通常使用一个专门的分支来准备确保一个团队修复当前发布的功能,其他团队可以开发下一个发布的功能。

git 工作流总结_第3张图片

维护分支

维护分支 (hotfix)用来紧急给产品的发布打上布丁,这是唯一可以从 master 上 fork 的分支。修复完成后,它们应该被并入 master 和 develop 分支。

实际的工作流程,则需要根据上面规则和实际情况进行详细的规划。

Fork 工作流

Fork 工作流不同与其他几个工作流。这个工作流可以让每个开发者都拥有一个服务端仓库。也就是说每个贡献者都有两个Git仓库,一个开放的服务端仓库,和私有的仓库。

Fork 工作流的主要有点在于代码可以轻易的整合进项目,而不需要每个人都推送到单一的中央仓库。开发者推送他们自己的服务端仓库,只有项目管理者可以推送到官方仓库。这使得管理者可以结束任何开发者的提交,却不需要给他们中央仓库的权限。

在工作项目中,本源规定了一套 Git Flow 工作流,后来因为开发者只有我一个人(partner在比较闲的时候时不时会来贡献几个功能),并且没有 中央代码库 的权限。所以后来就逐渐转变成了 Fork 工作流。

相比前三个工作流,Fork 工作流使用起来更简单,且最安全。因为贡献代码的人并不干扰中央仓库,只通过 Pull Request 来和中央代码库进行交互,最适用的场景就是开源仓库,和松散型的开发团队使用。

以上就是在和 Partner 寻找有效的工作方式时,学习到的 Git 团队工作流程。以后如果遇到其他新奇的工作流程会再补充更新。

你可能感兴趣的:(git 工作流总结)