使用 Git 的一点点疑惑:fork 跟 branch 的关系
一、引言
最近在工作中接触到了一种 “别样” 的代码管理方式:
一个项目新建出来,先由项目负责人从主干的分支上 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 的关系相关推荐
- 关于学习git时的一些疑惑与笔记
关于学习git时的一些疑惑与笔记 SSH相关问题 SSH是什么? SSH有什么作用? 如何在github配置SSH? 分支 什么是本地分支,远程分支? main主分支与master主支? 为什么要把m ...
- fork 与 branch、clone 的区别
fork 与 branch.clone 的区别 fork branch clone 对于没有使用 git 进行企业级的多人协作的 git 使用者来说,往往认为使用 git 进行代码仓的操作的过程中 ...
- git在commit提交时报:On branch master Changes not staged for commit
git在commit提交时报:On branch master Changes not staged for commit 之前使用SVN进行代码管理,现在突然切换到Git还不太习惯.今天自己在学习使 ...
- Git建立本地分支和远程分支的映射关系
Git建立本地分支和远程分支的映射关系 git branch -vv:查看本地分支和远程分支的映射关系 在切换分支前,须本地建立新分支,例如:git branch dev4test //本地建立de ...
- 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 ...
- git pull时解决分支分叉(branch diverged)问题
git pull时解决分支分叉(branch diverged)问题 参考文章: (1)git pull时解决分支分叉(branch diverged)问题 (2)https://www.cnblog ...
- 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 ...
- Git原理及实践(Fork模式)
1.简介: Git是目前最先进的分布式版本控制系统,在git的管理下,每个人的电脑上都有一个完整的版本库,配合云上一台充当"中央服务器"的电脑(方便交换和修改). git是用于记录 ...
- 面试官:说说Git中 fork, clone,branch这三个概念,有什么区别?
一.是什么 fork fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线 转到git仓库中,fork则可以代表分叉.克隆 出一个(仓库的)新拷贝 包含了原来的仓库 ...
最新文章
- 构建工具Gradle
- log4j2的配置文件log4j2.xml笔记
- [转]linux grep命令
- 2021江苏南通名师高考成绩查询,南通2021高考成绩排名榜单,南通各高中高考成绩喜报...
- 体验XHProf(linux版本)
- StereoRectify()函数定义及用法畸变矫正与立体校正
- 利用OpenCV实现人脸检测
- VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...
- java完全自学手册pdf,附答案+考点
- 磁盘精灵 4.5 版本
- linux firefox插件开发教程,如何在Linux上添加Firefox插件?
- 7.2 可分离变量的微分方程
- matlab c2d tustin,Matlab中的c2d函数用法以及绘制传函的Bode图
- 语料标注平台BRAT安装指导
- nodeclub迁移至nodebb
- 小米重返世界前五发布红米Note 5A,京东神预言小米复苏
- linux的ctrl alt f12,“Ctrl + Alt + F12”是做什么的?
- 【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)
- modelsim之inout类型tb文件编写及仿真
- 互联网公司招聘--网易--网易云音乐程序员--2017年笔试题
热门文章
- 解决Navicat Premium 16报\Navicat-Cracker\NavicatCrackerDlg.cpp:463 ->Can‘t Generate Activation Code
- php ecos框架,ECOS模板制作详细手册ForEcstoreShopexport.doc
- python基于Python的资产管理系统毕业设计-附源码201117
- html 编辑框 空值变红,HTML中关于表单的提交和输入的值是否为空
- eclipse tomcat mysql 环境搭建_web环境搭建,包括jdk安装,tomcat,mysql,eclipse安装
- lopatkin俄大神精简中文系统Windows 7 Professional SP1 7601.24540 x86-x64 ZH-CN SM
- Zabbix之配置华为交换机监控项
- 第一次个人编程作业——论文查重
- 【重装系统】MacBook Air重装Win7
- 消灭老鼠 有一只老鼠,在一个环形的田埂上挖了n个老鼠洞,这些洞也是连接为一个环状,我们要用泥土填满这些鼠洞,老鼠从第0号洞开始出现(第0号洞不填),然后依次按每间隔m个洞出现一次。我们要跟在老鼠后