簡體   English   中英

git clone:默認情況下是否淺?

[英]git clone : by default shallow or not?

我對git的最初了解是(至少最初是)要去中心化的VCS(例如允許完全脫機工作,甚至可以從另一個脫機存儲庫中克隆一個存儲庫...)。

依我的初步理解,這就是檢索存儲庫時術語“克隆”的原因:因為我們實際上已經獲得了它的完整副本(允許完整的脫機工作或讓其他人對其進行克隆)等等)。

但是后來我意識到事實並非如此:有時我正在研究最新的主人; 然后切換到另外一個分支,我也期望這是最新的為好,但是當我的Git獲取(或混帳拉)我得到新的東西(不一定是新 )。

那我最初的理解錯了嗎? 實際上是一個克隆不是真正的克隆嗎? 它實際上是淺表嗎? git clone的默認設置是什么? 官方文檔僅聲明--depth“創建淺表克隆”; 我是否應該理解它才能讓我選擇上述克隆的深度(或應該說淺淺?)? 還是創建了一個淺表克隆,而不是創建了一個沒有選擇的深表克隆?

克隆git repo時,將獲得master分支的完整副本,並在克隆時檢索其他分支的所有元數據(存儲在您的repo的.git dir中)。 當您檢出分支/在本地之間切換時,Git使用此元數據來構造分支。 如果自從克隆存儲庫以來,或者自從上次從remote提取數據以來,某人已推送到遠程分支分支將過期。

您必須在線才能執行提取,並且每個分支(默認情況下)都是單獨管理的。 因此,如果您在“ master”中執行“ pull”,則不會自動更新其他分支-盡管git會(同樣,默認情況下)為所有其他分支提取元數據 ,以便您可以在它們之間進行切換並根據需要執行合並至。

提取的分支提交處於休眠狀態,直到您在該分支中工作時指定要對其執行的操作為止。 這樣做的原因是,您可能具有本地分支的不同/工作副本,但您現在還不想將其與遠程更改合並-因此,在准備好要這樣做時,必須手動進行操作。 想象一個場景,其中有以下分支:

  • 功能/我的功能

您當前正在與另一位開發人員一起使用feature/my-feature -你們倆都在定期推送代碼並進行協作。 然后,要求您為LIVE進行錯誤修復。 在這種情況下,您可以存儲或提交對feature/my-feature的更改, 可能會推送(如果更改已准備好供其他開發人員使用),切換到master ,進行拉動並創建另一個bug修復分支來修復LIVE問題-您不希望您的feature/my-feature代碼被覆蓋...當您准備好對遠程分支進行更改時,您希望手動進行控制。

“拉”是“獲取”和“合並”的組合。 “獲取”從服務器中提取分支元數據,“合並”獲取當前遠程跟蹤的分支提交,並將它們合並到本地分支中。

git中的“淺表克隆”仍會為您提供最新的代碼快照,但不會克隆整個歷史記錄圖。 那是唯一的區別-與分支無關。 depth參數允許您指定每個分支應拉回多少次提交。 就個人而言,除了拉回CI / CD服務器上的存儲庫外,我再也不需要使用它。

Git與VCS(例如TFS)非常不同,不僅是因為您必須一直在線。 它非常靈活-並允許您作為開發人員在工作方式上非常靈活(只要您選擇了適合自己的分支策略)-不幸的是-它確實需要一些重新學習,尤其是在學習時涉及術語(例如git checkout不會從遠程提取代碼-只是在本地分支之間切換)。

默認情況下,對於要提取的分支,Git克隆並不淺,但是除非您檢出它們,否則它不會提取遠程分支中呈現的所有提交。 如果要出於備份或鏡像目的而克隆,則應使用--bare選項。 裸克隆將所有內容全部拉出。 請注意,除非從另一個克隆(可能至少是本地克隆)指出,否則裸存儲庫無法直接使用。

暫無
暫無

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

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