簡體   English   中英

如何將 Git 淺克隆轉換為完整克隆?

[英]How to convert a Git shallow clone to a full clone?

這個問題的后續:如果我有一個淺克隆,如何獲取所有較舊的提交以使其成為完整克隆?

以下命令(git 版本 1.8.3)會將淺克隆轉換為常規克隆

git fetch --unshallow

然后,訪問原點的所有分支(感謝評論中的@Peter)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

編輯: git fetch --unshallow現在是一個選項(感謝 Jack O'Connor)。

你可以運行git fetch --depth=2147483647

淺的文檔

特殊深度 2147483647(或 0x7fffffff,帶符號的 32 位 integer 可以包含的最大正數)表示無限深度。

我只需要將回購深化到特定的提交。

閱讀man git-fetch后,我發現無法指定提交,但可以指定日期:

git fetch --shallow-since=15/11/2012

對於那些需要漸進深化的人,另一個man引用:

 --deepen=<depth>

類似於 --depth ,除了它指定從當前淺邊界而不是從每個遠程分支歷史記錄的尖端提交的數量。

實現淺克隆到深克隆的兩種方式:

  1. 使用以下步驟下載分支:(這會下載分支的淺表副本,然后將其轉換為完整克隆,即帶來完整的分支及其歷史記錄)。

    一個。 git 克隆 -b 分支http://git.repository/customSP01.git --depth 1

這會做一個淺層克隆(使用深度選項)只獲取一個分支(在您請求的深度)。

b. cd customSP01
c. git fetch -depth=100
d. get fetch -depth=500
....
e. git fetch --unshallow    

//上面的命令會將淺克隆轉換為普通克隆。 但是,這並沒有帶來所有的分支:

然后,訪問所有分支。

f. git remote set-branches origin '*'

[此步驟也可以通過在 .git/config 中編輯以下行來手動完成。

fetch = +refs/heads/master:refs/remotes/origin/master

to(用 * 替換 master):

fetch = +refs/heads/*:refs/remotes/origin/* ]

g. git fetch -v

這會將淺克隆轉換為具有所有歷史記錄和分支詳細信息的深度克隆。


  1. 如果您使用以下命令代替步驟 a 中存在的命令,則可以避免步驟 f 和 g。 做淺克隆:

    git clone -b branch --no-single-branch http://git.repository/customSP01.git --depth 1

你可以試試這個:

git fetch --update-shallow

上述消息都沒有成功。 我正在嘗試從淺克隆開始使用 git 標簽。

首先我試過

git fetch --update-shallow

哪種工作到了一半。 然而,沒有可用的標簽

git fetch --depth=1000000

最后一個命令真的獲取了標簽,我終於可以執行了

git checkout -b master-v1.1.0 tags/v1.1.0

並完成它。

高溫高壓

暫無
暫無

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

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