1. 程式人生 > 其它 >fork 與 branch、clone 的區別

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

宣告 歡迎轉載,但請保留文章原始出處:) 部落格園:https://www.cnblogs.com/chenxiaomeng/ 如出現轉載未宣告 將追究法律責任~謝謝合作