fork 与 branch、clone 的区别

文章目录


  对于没有使用 Git 进行企业级的多人协作的 Git 使用者来说,往往认为使用 Git 进行代码仓的操作的过程中,fork 得到的结果就相当于一个新的 branch,但实际上,这是完全不同的概念。另外,也有人分不清 fork 与 clone 的区别,笔者也在此一并解释一下。

fork

  fork 的原意是“叉子”,一种西方人的餐具(西方人很喜欢使用与饮食相关的文化来命名),这相当于中国人的筷子。对于一个菜,大家可以使用筷子一起吃,因此,fork 是一种实现多人协作的方式。

  fork 只能对代码仓进行操作,且 fork 不属于 Git 的命令。它是远程代码仓托管平台提供的一种“操作”,一般还是该平台网站上的一个可点击的文字,在点击该文字之后就可以触发 fork 操作。对于远程的原代码仓,使用 fork 之后,得到的是该远程仓的一个远程瞬时独立副本(后面简称为副本仓),但其(副本仓)的所有人变成了使用 fork 的人(为了简化描述,下面假设使用的 fork 的人是你)。之所以说 fork 得到的代码仓的所有者变成了你,是因为该仓 clone 中的 URL 变成了关于你的 URL,而原代码仓 clone 中的 URL 是关于该原代码仓所有者的 URL。也就是说,如果你对一个代码仓使用 fork,则远程平台会创建一个属于你的代码仓,而这个新代码仓的初始数据会用 fork 之前的那个代码仓来初始化。这样一来,因为这个 fork 之后的代码仓属于你,所以你对这个代码仓作任何操作都不会对 fork 之前的那个代码仓产生影响。

  因此,fork 相当于对代码仓的“copy”。但是,对原代码仓使用 fork 得到的副本仓,远程代码仓管理网站会保留副本仓与原代码之间的一种“联系”。这种“联系”并不是它们之间的同步更新,因为这种同步更新的技术是不可能实现的,原因是多人协作提交的代码有可能引起冲突。这种“联系”只是标记此副本仓是从原代码仓中使用 fork 得到的,这对以后将进行的从副本仓到原代码仓的代码合入提供了可能。

  另外,fork 也有“分支”的意思。但很遗憾,另一个表示“分支”的词 branch,已经作为 Git 的一个命令而被使用了。因此使用这个词再适合不过了。

branch

  branch 的原意是“分支”。这很好理解,这意味着新 branch 是为原 branch 提供了一种新的开发方向。

  branch 只能对某一分支(branch)或提交(commit)进行操作,它是 Git 的一种命令,操作结果是建立一个新分支。然后使用 checkout 到新分支之后,以后提交将建立一个与原分支相对独立的一个提交记录。这些特征好像与 fork 很类似,但 fork 得到的是一个新的、自己的代码仓,而 branch 得到的是一个自己的代码仓的一个新分支,两者在概念上大相径庭。

clone

  clone 的一词容易让人望文生义。有人说它就是“copy”,但实际上它的含义更接近“download”,而 fork 更接近于“copy”。

  clone 是 Git 的一种命令,它的作用是将文件从远程代码仓下载到本地,从而形成一个本地代码仓,而这个远程代码仓可以是自己的远程代码仓,也可以是他人的,只要能获取该代码仓关于命令 clone 的 URL 即可。clone 与 fork 的区别在于,fork 是将远程别人的代码仓,创建一个自己的远程副本,而 clone 是将远程的某个代码仓,创建一个自己的本地副本,而这“某个代码仓”可以是远程自己的代码仓,也可以是他人的。

补充

  使用画图通常能让概念变得更清晰。为此,笔者作了一张图来表明它们的关系。更多的信息,可见:

  Git 开发模式:
https://blog.csdn.net/wangpaiblog/article/details/124003188

在这里插入图片描述

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值