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

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 是将远程的某个代码仓,创建一个自己的本地副本,而这“某个代码仓”可以是远程自己的代码仓,也可以是他人的。
————————————————
版权声明:本文为CSDN博主「秘境奇才」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangpaiblog/article/details/115879464

posted @ 2021-09-29 16:38  陈晓猛  阅读(609)  评论(0编辑  收藏  举报