簡體   English   中英

git clone實際上是如何工作的

[英]How git clone actually works

我在Github上有一個存儲庫,有2個分支: masterdevelop

當我克隆存儲庫並運行$ git branch它只顯示master分支。
如果我運行$ git branch -a我可以看到所有的遠程分支。

現在,如果我進行$ git checkout develop ,我收到消息:

分支機構開發設置跟蹤遠程分支從原點發展。
切換到新的分支'發展'

究竟發生了什么? 當我運行$ git clone remote-url ,或者當我運行時: $ git checkout develop ,或者兩者都未獲取來自遠程develop分支的提交?

退房develop后我有沒有做過$ git pull origin develop ,或者它已經完成了?

請幫助我理解當遠程有多個分支時clone如何工作。

git clone獲取所有遠程分支,但只為您創建一個本地分支master 所以當你運行git branch -a ,你會看到類似這樣的東西:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/develop
  remotes/origin/master

這意味着您有一個本地分支master和幾個遠程分支。 當你運行git checkout develop ,git創建另一個本地分支develop跟蹤遠程分支origin/develop git嘗試同步跟蹤的分支,所以你不必做的另一個pullcheck out

如果本地和遠程分支機構的術語聽起來很混亂,您可以瀏覽此文檔 它有一些很好的數字可以幫助您理解它們,以及當您進一步提交時本地和遠程分支如何移動。

您可能會發現此答案很有用: 如何在Git中克隆所有遠程分支? ,第一個答案。

git clone首先創建一個新的空存儲庫。 (比如git init

然后,它將給定的存儲庫設置為名為“origin”的遠程存儲庫。 git remote add

然后主要工作由git fetch完成,這是與其他存儲庫通信的唯一命令。 它將遠程存儲庫的所有提交傳輸到當前存儲庫,並在本地存儲庫分支內創建,從與遠程存儲庫上的分支對應的“remote / origin /”開始。

如果你有一個默認的非裸存儲庫,它也會調用git checkout來檢查通常是主分支。

如果你調用git branch -r它將顯示“遠程”分支,即存儲庫中的那些分支,它將由git fetch更新。 (你永遠不會直接在這些方面工作。)

每當你想在一個分支上工作時,你都使用git checkout來創建該分支的副本,而不使用“remote / origin /”前綴。 這些是您工作的“本地”分支機構。 git branch將顯示那些。)

您所做的幾乎所有事情都只涉及您的本地存儲庫。 唯一的例外是git push ,它是更新遠程存儲庫的唯一命令,而git fetch是查詢其他存儲庫的唯一命令。

git pull只是git fetchgit merge的組合。 第一個提取更改並更新remote / origin / *,第二個將這些更改合並到本地分支中。

簡而言之, git clone repository-url按順序執行以下操作:

  1. 創建一個新的空存儲庫。

     git init 
  2. 創建一個名為“origin”的遠程並將其設置為給定的URL。

     git remote add origin repository-url 
  3. 從遠程稱為“origin”獲取所有提交和遠程分支。

     git fetch --all 
  4. 創建一個本地分支“master”以跟蹤遠程分支“origin / master”。

     git checkout --track origin/master 

有趣的是,fork(在GitHub或Bitbucket中)只是服務器端克隆。

git clone默認提取存儲庫的所有分支。 如果要檢出所有分支 ,則需要克隆存儲庫的裸副本,取消設置裸標志並重置它 如果您還有其他問題,請與我們聯系。

克隆存儲庫時,您將獲得所有分支以及可以從任何這些分支到達的所有提交。

但是,您將無法獲得除master之外的任何其他分支的本地分支。 其他的那些作為遠程分支(遠程/起源/開發),你可以隨時查看任何這些。 然后,git將在您執行簽出時在遠程分支和您創建的本地分支之間設置跟蹤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM