如何 Git Clone 指定分支
Git 是分佈式的, 不同於 SVN 和 CVS 等舊的集中式版本控制系統。每個開發者都能在本地和遠程查看記錄和控制代碼,他們也可以視情況從不同位置訪問或操縱不同部分的代碼。
自從 Linus Torvalds (Linux 操作系統內核的著名作者) 在 2005 年爲 Linux 內核開發了 Git,它就開始成爲世界上使用最廣泛的現代版本控制系統。
在本篇文章中,我會介紹 Git 克隆和 Git 分支工作流,並且展示如何根據需求克隆一個指定的分支。讓我們開始吧!
必備知識
-
基本的終端知識
-
能使用終端指令
-
安裝 Git(我也會教如何安裝)
-
GitHub 賬號
-
好的心情(笑起來,朋友)
快速入門 Git 和 GitHub
摘自維基百科,
Git 是軟件開發中用來跟蹤項目(代碼)變更的一個分佈式版本控制系統。主要專注於開發人員之間加強協調,協作,速度和效率。
GitHub 是基於 Web 的託管服務,使用 Git 進行版本控制。它提供了 Git 的所有分佈式版本控制和源代碼管理的功能,還添加了更多計算機編碼的功能。
如何在 Windows 上安裝 Git
下載和安裝最新的版本:Windows 上 Git 的安裝程序
如何在 Linux 上安裝 Git
不同的 Linux 發行版本,有不同的命令:
Debian or Ubuntu
sudo apt-get update
sudo apt-get install git
Fedora
sudo dnf install git
CentOS
sudo yum install git
Arch Linux
sudo pacman -Sy git
Gentoo
sudo emerge --ask --verbose dev-vcs/git
如何在 Mac 上安裝 Git
下載和安裝最新的版本:Mac 上 Git 的安裝程序
或者可以執行如下指令:
brew install git
現在我們已經安裝了 Git,讓我們繼續本教程。
簡介 Git 克隆
Git 允許你在 “倉庫” 中版本化管理項目。該倉庫是基於 Web 的託管服務進行版本控制,和 GitHub 一樣。
你可以克隆倉庫到你本地的機器,並且得到所有的文件和分支(我稍後會講解更多關於分支的內容)。
例如,可以通過 SSH 克隆 freeCodeCamp 的倉庫,如下:
git clone git@github.com:freeCodeCamp/freeCodeCamp.git
簡介 Git 分支
在做項目時,你可能會有不同的功能,並且有多個貢獻者會做該項目及其功能。
分支允許你在 master
分支中使用相同的文件創建一個 “playground(遊樂場)” 。你可以使用這個分支構建獨立的功能、測試新功能、做重大改動、修復代碼、寫文檔,或者在不中斷的情況下嘗試自己的想法,或者優化生產代碼。
分支是 Git 中的一個核心概念,在 GitHub 中也用於管理一個項目不同版本的工作流。 master
分支始終是倉庫中的默認分支,通常被認爲是 “生產和可部署代碼”。新分支如 passwordless-auth
或 refactor-signup-ux
可以從 master
分支中創建。
freeCodeCamp 倉庫中的所有分支
如何克隆 Git 分支
當你使用 git clone
指令克隆倉庫時,請記住這會克隆分支和遠程 HEAD
。默認情況下通常是 master
分支,幷包括倉庫中的所有其他分支。
所以當你克隆一個倉庫時,你克隆了 master
分支和所有其他分支。這意味着你可以隨意切換到另一個分支。
假設你在項目上的任務是開發一項功能,將無密碼身份驗證添加到用戶儀表板。這個功能位於 passwordless-auth
分支上。
你不需要 master
分支,因爲你的 “功能分支” 之後會被合併到 master
中。那麼你如何克隆 passwordless-auth
分支,而無需獲取所有其他分支的 “一堆你不需要的文件” ?
我創建了示例倉庫來解釋這一點。此倉庫包含一個使用 NextJS 構建的簡單博客,有四個虛擬分支機構:
-
master
-
dev
-
staging
-
passwordless-auth
在 Nextjs 中,文件夾 pages/api
內的任何文件都被映射到 /api/*
路徑,並被視爲替代 page
的 API 端點。在我的倉庫中,我在這個目錄中創建了不同的虛擬 APIs,以使每個分支都不同。
master
分支保存 pages/api/hello.js 文件,而 passwordless-auth
分支保存 pages/api/auth.js 文件。每個文件僅返回一個僞文本響應。在這裏查看 master
分支的 API 響應(給你一個特別的消息)。
讓我們克隆倉庫:
git clone git@github.com:BolajiAyodeji/nextjs-blog.git
我們可以訪問此倉庫中的所有分支,你可以在每個版本之間輕鬆切換,以查看每個版本及其文件。
git branch -a
想下 remotes/origin/.. 分支來自哪裏?
當你克隆倉庫時,你是從互聯網或內部服務器上的 remote 倉庫提取數據。Origin 是你的 Git 創建的別名,用於替換遠程 URL(如果你願意,你可以更改或指定其他別名)。
remotes/origin/.. 分支指向從互聯網克隆的源倉庫,因此你仍然可以從源執行 pull/push 。
所以當你克隆 master
分支到你的機器上時, remotes/origin/master
是 master
在網絡上的源分支, master
是你本機的分支。因此,你將從 remotes/origin/master
中 pull/push。
總的來說 Remote 是指向互聯網上倉庫的 URL,而 Origin 是這個遠程 URL 的別名。
如何克隆一個指定的分支
現在從我們的演示倉庫中克隆一個指定的分支。有兩種方法克隆一個特定的分支。你可以:
-
克隆倉庫,獲取所有分支,立即切換到指定的分支。
-
克隆倉庫並僅獲取一個分支。
方案一
git clone --branch <branchname> <remote-repo-url>
或
git clone -b <branchname> <remote-repo-url>
這裏 -b 只是 --branch 的別名。
這樣,你就可以獲取倉庫中的所有分支,切換到你指定的分支,指定的分支成爲本地分支用於 git push
和 git pull
。但你仍然從每個分支中獲取了所有文件。這可能不是你想要的吧?
讓我們測試看看:
git clone -b passwordless-auth git@github.com:BolajiAyodeji/nextjs-blog.git
這會自動將 passwordless-auth
配置爲本地分支,但仍會跟蹤其他分支。
方案二
git clone --branch <branchname> --single-branch <remote-repo-url>
或
git clone -b <branchname> --single-branch <remote-repo-url>
這裏 -b 只是 --branch 的別名。
這與方案一的操作相同,除了 --single-branch
選項,它是在 Git 版本 1.7.10 及更高版本中引入的。這個選項允許你僅從指定的分支中獲取文件而不獲取其他分支。
讓我們測試看看:
git clone -b passwordless-auth --single-branch git@github.com:BolajiAyodeji/nextjs-blog.git
這會自動將 passwordless-auth
配置爲本地分支,且只能跟蹤此分支。
如果你執行 cd pages/api
,你會在 passwordless-auth
分支中找到之前設置的 auth.js
文件。
總結
你可能無法使用互聯網或沒有足夠的存儲空間,但你需要在指定的分支中工作,或者你可能出於各種原因希望克隆具有有限文件的指定分支。幸運的是, Git 爲你提供了執行此操作的靈活性。鍛鍊你學到的新知識並嘗試一下吧,還有更多的 "Git" 知識去學習。
一次學習一個知識點,對吧✌?
原文鏈接:https://www.freecodecamp.org/news/git-clone-branch-how-to-clone-a-specific-branch/
作者:Bolaji Ayodeji
譯者:tengfei
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/jx6y_StdyoEppu6d9iTWkQ