文章目錄
加快大型 GIT Repository 下載速度(指定 depth)
同事反應有個專案在經年累月的發展下,快速成長到每次 clone 都要個十幾二十分鐘,後來甚至有次在 production deploy 時還完全卡死,無法正確 pull 新的 code
在檢查無法 pull 的過程中,發現光只是 clone 就讓我失去耐心了,所以分享給同事只抓最後版本的做法(發現用自己筆記分享做法給同事超省事還能 reuse ,超棒的 哈哈)
語法及說明
git clone 語法
git clone [--template=<template_directory>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>] [--dissociate] [--separate-git-dir <git dir>] [--depth <depth>] [--[no-]single-branch] [--no-tags] [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules] [--jobs <n>] [--] <repository> [<directory>]
--depth <depth>
Create a shallow clone with a history truncated to the specified number of commits. Implies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches. If you want to clone submodules shallowly, also pass --shallow-submodules.
僅會下載指定數量的歷史紀錄,隱含
--single-branch
指令效果,除非明確加上--no-single-branch
,針對submodule
則可使用--shallow-submodules
git clone 時加上 --depth
參數
以下使用 linux kernel 當做範例(因為它夠大):https://github.com/torvalds/linux.git
下列方法,擇一即可
使用指令
git.exe clone --depth 1 "https://github.com/torvalds/linux.git" "D:\testGit\linux"
- 指定只取得最近
1
次 commit 資訊
- 指定只取得最近
使用 TortoiseGit
實際效果
commit log
- 加上
--depth 1
- 取得完整歷史紀錄
- 加上
大小比較
- 加上
--depth 1
:963 MB
- 取得完整歷史紀錄:2.92 GB
- 加上
下載時間(誤差請參考心得說明)
- 加上
--depth 1
:10m36s - 取得完整歷史紀錄:1h11m56s
- 加上
心得
針對下載耗用時間部份,我測試過兩次,兩次誤差非常大,主要的原因是網路速度
,所以時間的耗用比較適合用來表示一個相對趨勢而非絕對的倍數關係
透過 repository 使用 size
或是 log 數量
搭配 clone 時間 可以明顯比較出有沒有加入 --depth
參數的差異,也可以依據不同目的採用不同策略:只需要 部份紀錄
或是想要節省處理時間時,就使用 --depth
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。