面試官:說說Git中 Fork, Clone,Branch這三個概念,有什么區(qū)別?
本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯(lián)系JS每日一題公眾號。
一、是什么
fork
fork,英語翻譯過來就是叉子,動詞形式則是分叉,如下圖,從左到右,一條直線變成多條直線
轉到git倉庫中,fork則可以代表分叉、克隆 出一個(倉庫的)新拷貝
包含了原來的倉庫(即upstream repository,上游倉庫)所有內容,如分支、Tag、提交
如果想將你的修改合并到原項目中時,可以通過的 Pull Request 把你的提交貢獻回 原倉庫
clone
clone,譯為克隆,它的作用是將文件從遠程代碼倉下載到本地,從而形成一個本地代碼倉
執(zhí)行clone命令后,會在當前目錄下創(chuàng)建一個名為xxx的目錄,并在這個目錄下初始化一個 .git 文件夾,然后從中讀取最新版本的文件的拷貝
默認配置下遠程 Git 倉庫中的每一個文件的每一個版本都將被拉取下來
branch
branch,譯為分支,其作用簡單而言就是開啟另一個分支, 使用分支意味著你可以把你的工作從開發(fā)主線上分離開來,以免影響開發(fā)主線
Git 處理分支的方式十分輕量,創(chuàng)建新分支這一操作幾乎能在瞬間完成,并且在不同分支之間的切換操作也是一樣便捷
在我們開發(fā)中,默認只有一條master分支,如下圖所示:
通過git branch可以創(chuàng)建一個分支,但并不會自動切換到新分支中去
通過git checkout可以切換到另一個testing分支
二、如何使用
fork
當你在github發(fā)現(xiàn)感興趣開源項目的時候,可以通過點擊github倉庫中右上角fork標識的按鈕,如下圖:
點擊這個操作后會將這個倉庫的文件、提交歷史、issues和其余東西的倉庫復制到自己的github倉庫中,而你本地倉庫是不會存在任何更改
然后你就可以通過git clone對你這個復制的遠程倉庫進行克隆
后續(xù)更改任何東西都可以在本地完成,如git add、git commit一系列的操作,然后通過push命令推到自己的遠程倉庫
如果希望對方接受你的修改,可以通過發(fā)送pull requests給對方,如果對方接受。則會將你的修改內容更新到倉庫中
整體流程如下圖:
clone
在github中,開源項目右側存在code按鈕,點擊后則會顯示開源項目url信息,如下圖所示:
通過git clone xxx則能完成遠程項目的下載
branch
可通過git branch進行查看當前的分支狀態(tài),
如果給了--list,或者沒有非選項參數(shù),現(xiàn)有的分支將被列出;當前的分支將以綠色突出顯示,并標有星號
以及通過git branch創(chuàng)建一個新的分支出來
三、區(qū)別
其三者區(qū)別如下:
- fork 只能對代碼倉進行操作,且 fork 不屬于 git 的命令,通常用于代碼倉托管平臺的一種“操作”
- clone 是 git 的一種命令,它的作用是將文件從遠程代碼倉下載到本地,從而形成一個本地代碼倉
- branch 特征與 fork 很類似,fork 得到的是一個新的、自己的代碼倉,而 branch 得到的是一個代碼倉的一個新分支
參考文獻
https://git-scm.com/book/zh/v2/Git-基礎-獲取-Git-倉庫
https://git-scm.com/book/zh/v2/Git-分支-分支簡介