一、引言

最近在工作中接触到了一种 “别样” 的代码管理方式:

一个项目新建出来,先由项目负责人从主干的分支上 fork 出来一个仓库,然后各项目成员向这个 fork 出来的仓库中拉取上传代码,最后再由项目负责人将测试完成的项目代码与分支合并。

虽然我之前接触 SVN 代码管理比较多,但是实际上对于 Git 管理代码也不是很有经验。虽然私底下也有使用 Git 管理工具,但也只是起到个人代码版本备份管理的作用。对于这种 “别样” 的代码管理方式,很是不理解:

为什么要 fork?

Git 出现的意义,不就是方便多人协作更加方便的拉取分支和合并分支的吗?

二、fork 其实并不是 Git 操作

经过我搜集资料,我发现了一个非常令 “新人” (也就是我)震惊的事实,那就是:

fork 其实并不是 Git 操作,而是一个 GitHub 操作

也就是说,对于原生的 Git 工具来说,是没有 fork 的操作的,fork 是类似 GitHub、码云等等在线代码托管平台提出来的功能。

fork 的作用,类似于当你在托管平台上看到了一个很有趣的项目,想要自己去改进它,然后你 fork 了它(类似克隆),最后你改了一个很厉害的功能出来,想要推给原 fork 项目,这时候你可以 pull request,一旦对方接受了你的 pull request,你的代码就有可能会出现在原 fork 项目中了。

非常形象的例子可以参考这篇博客:
GitHub的Fork 是什么意思

三、branch 当然是一个 Git 操作

根据上一个标题,这个标题所要讲述的内容就很明显了:

branch 当然是一个 Git 操作

对于远端仓库来说,默认有一个 master 的分支,也叫作主干。当你接到了一个新的需求,你可以拉一个分支出来,在这上面修改代码而不影响原主干代码,等修改测试完毕后再合并到主干上去。

这也就是非常常见的 Git 分支管理的内容。

四、fork 还是 branch

根据我们上述的讨论,我们发现 fork 仿佛与 branch 有了一些重合点。一个是 GitHub 操作,一个是 branch 操作,同样可以拉一个与主干不影响的地方进行开发,那么他们之间有什么不同呢?

我认为,他们之间的不同,也就是我们如何使用他们的原因。我认为:

fork,归根结底还是克隆,只是一种可以 pull request 可以合并到原项目的一种克隆

branch,则是一个项目仓库中的代码管理方式,一种方便多人协作的方式

也就是说,fork 可以给你的,远比 branch 要大的多。fork 其实就是一个新的仓库,你可以为所欲为,可以随便开分支,只要最后不乱 pull request 乱合并到原项目就不会出事;而 branch 其实只是一个分支,比一个仓库的范围要小得多,你实际上还是处于同一个项目仓库中。

五、总结

那么现在再来看看为何要这么管理代码:

项目负责人 fork 一份到自己仓库,项目成员上传到这个 fork 的仓库,最大限度对于原项目没有任何影响,只要 pull request 的时候小心就行。

这样的代码管理方式,非常适合同一个大型项目下同时开发着好多个子项目,各个子项目又有着各自的项目成员。

避免在同一个仓库中开太多的子分支是为了最大限度的避免出错,这种代码管理方式自有其意义。

哈哈哈,总算是解了自己的疑惑。希望能够对有同样疑惑的朋友一些启发 ^_^

To be Stronger:)

使用 Git 的一点点疑惑:fork 跟 branch 的关系相关推荐

  1. 关于学习git时的一些疑惑与笔记

    关于学习git时的一些疑惑与笔记 SSH相关问题 SSH是什么? SSH有什么作用? 如何在github配置SSH? 分支 什么是本地分支,远程分支? main主分支与master主支? 为什么要把m ...

  2. fork 与 branch、clone 的区别

    fork 与 branch.clone 的区别 fork branch clone   对于没有使用 git 进行企业级的多人协作的 git 使用者来说,往往认为使用 git 进行代码仓的操作的过程中 ...

  3. git在commit提交时报:On branch master Changes not staged for commit

    git在commit提交时报:On branch master Changes not staged for commit 之前使用SVN进行代码管理,现在突然切换到Git还不太习惯.今天自己在学习使 ...

  4. Git建立本地分支和远程分支的映射关系

    Git建立本地分支和远程分支的映射关系 git branch -vv:查看本地分支和远程分支的映射关系 在切换分支前,须本地建立新分支,例如:git branch dev4test  //本地建立de ...

  5. Git报错:fatal: The current branch main has no upstream branch

    Git报错:fatal: The current branch main has no upstream branch 参考:https://blog.csdn.net/benben_2015/art ...

  6. git pull时解决分支分叉(branch diverged)问题

    git pull时解决分支分叉(branch diverged)问题 参考文章: (1)git pull时解决分支分叉(branch diverged)问题 (2)https://www.cnblog ...

  7. Git Push 错误 [remote rejected] master - master (branch is currently checked out) 无法查看push后的git中文件

    原文链接地址: http://blog.csdn.net/wby0322/archive/2010/10/14/5940018.aspx 在使用Git Push代码到数据仓库时,提示如下错误: [re ...

  8. Git原理及实践(Fork模式)

    1.简介: Git是目前最先进的分布式版本控制系统,在git的管理下,每个人的电脑上都有一个完整的版本库,配合云上一台充当"中央服务器"的电脑(方便交换和修改). git是用于记录 ...

  9. 面试官:说说Git中 fork, clone,branch这三个概念,有什么区别?

    一.是什么 fork fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线 转到git仓库中,fork则可以代表分叉.克隆 出一个(仓库的)新拷贝 包含了原来的仓库 ...

最新文章

  1. 构建工具Gradle
  2. log4j2的配置文件log4j2.xml笔记
  3. [转]linux grep命令
  4. 2021江苏南通名师高考成绩查询,南通2021高考成绩排名榜单,南通各高中高考成绩喜报...
  5. 体验XHProf(linux版本)
  6. StereoRectify()函数定义及用法畸变矫正与立体校正
  7. 利用OpenCV实现人脸检测
  8. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...
  9. java完全自学手册pdf,附答案+考点
  10. 磁盘精灵 4.5 版本
  11. linux firefox插件开发教程,如何在Linux上添加Firefox插件?
  12. 7.2 可分离变量的微分方程
  13. matlab c2d tustin,Matlab中的c2d函数用法以及绘制传函的Bode图
  14. 语料标注平台BRAT安装指导
  15. nodeclub迁移至nodebb
  16. 小米重返世界前五发布红米Note 5A,京东神预言小米复苏
  17. linux的ctrl alt f12,“Ctrl + Alt + F12”是做什么的?
  18. 【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)
  19. modelsim之inout类型tb文件编写及仿真
  20. 互联网公司招聘--网易--网易云音乐程序员--2017年笔试题

热门文章

  1. 解决Navicat Premium 16报\Navicat-Cracker\NavicatCrackerDlg.cpp:463 ->Can‘t Generate Activation Code
  2. php ecos框架,ECOS模板制作详细手册ForEcstoreShopexport.doc
  3. python基于Python的资产管理系统毕业设计-附源码201117
  4. html 编辑框 空值变红,HTML中关于表单的提交和输入的值是否为空
  5. eclipse tomcat mysql 环境搭建_web环境搭建,包括jdk安装,tomcat,mysql,eclipse安装
  6. lopatkin俄大神精简中文系统Windows 7 Professional SP1 7601.24540 x86-x64 ZH-CN SM
  7. Zabbix之配置华为交换机监控项
  8. 第一次个人编程作业——论文查重
  9. 【重装系统】MacBook Air重装Win7
  10. 消灭老鼠 有一只老鼠,在一个环形的田埂上挖了n个老鼠洞,这些洞也是连接为一个环状,我们要用泥土填满这些鼠洞,老鼠从第0号洞开始出现(第0号洞不填),然后依次按每间隔m个洞出现一次。我们要跟在老鼠后