對於沒有使用 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