如何 Git Clone 指定分支

Git 是分佈式的, 不同於 SVN 和 CVS 等舊的集中式版本控制系統。每個開發者都能在本地和遠程查看記錄和控制代碼,他們也可以視情況從不同位置訪問或操縱不同部分的代碼。

自從 Linus Torvalds (Linux 操作系統內核的著名作者) 在 2005 年爲 Linux 內核開發了 Git,它就開始成爲世界上使用最廣泛的現代版本控制系統。

在本篇文章中,我會介紹 Git 克隆和 Git 分支工作流,並且展示如何根據需求克隆一個指定的分支。讓我們開始吧!

必備知識

快速入門 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 構建的簡單博客,有四個虛擬分支機構:

在 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