一、網路優化
1、選擇合適的源:Git底層是利用HTTP/HTTPS或SSH協議傳輸數據的,不同的Git源伺服器地理位置不同、網路帶寬也不同,選擇合適的源對於Git Clone的速度有巨大的影響。GitHub和GitLab因為國內網路封鎖問題,所以訪問速度相對較慢,可以選擇一些國內的Git鏡像,如:阿里雲、華為雲、清華大學、中科院等。
2、修改Git默認緩存:Git 1.8版本後默認開啟了HTTP緩存,
緩存數據保存在~/.gitconfig中,這裡主要講的是位於緩存數據中的HTTP數據緩存。如果git clone一個存在大量小文件的倉庫,而HTTP響應頭中Content-Length 不存在或錯誤就會影響性能,這是因為如果長度錯誤,緩存有可能還會等待伺服器發送數據。而如果伺服器使用chunked編碼則會緩存全部內容,從而浪費空間且降低性能。修改Git默認緩存的方法是在~/.gitconfig中添加下列代碼:
[http] postBuffer = 524288000 maxRequestBuffer = 100M maxBufferSize = 5G
二、開啟SHALLOW Clone
默認情況下,Git Clone會將整個項目從伺服器上完整的clone下來,這通常會包含每一個歷史commit,這意味著你的clone會非常龐大,時間也非常長,是非常低效的。而開啟shallow clone可以只下載一個項目的補丁(patch),讓clone速度更快。
使用Shallow Clone只需要在clone時添加–depth參數,後面跟的數字表示只clone最近的多少個commit速度就會大大提升,雖然不是完整的,但對於開發者而言已經足夠了,對於那些只需要關注某一版本的人工作足矣。
git clone --depth=1 git://github.com/user/repo.git
三、使用git-lfs
大型倉庫往往會包含許多大文件,Git v1.5.6及之前版本並沒有提供大文件處理的相關功能,然而,Git官方卻開發出一個名為 Git Large File Storage 的擴展 Git-lfs。Git LFS 用於管理Git倉庫中的徐大文件(大於100 MB),並以非同步形式在本地和遠程倉庫之間傳遞。使用 Git-lfs 可以使大型倉庫的checkouts和clones速度得到大幅提升。
可以使用以下步驟安裝Git LFS:
- 安裝git-lfs。具體安裝步驟參閱:https://git-lfs.github.com/。
- 確保Git LFS文件正確地提交到倉庫。在提交前,請使用以下命令將您的大文件標記為「指針」:
- 提交更改,並push到遠程倉庫。
git lfs track "*.mp4"
四、使用 Gitsync 進行多線程Clone
大型代碼庫的Clone非常耗時間,尤其是在有些環境下Git伺服器的帶寬受到限制。在這種情況下,您需要讓Clone並行,以加速clone速度。Gitsync 工具提供了一種自動化多線程Clone方法。Gitsync 並行clone多個時可以充分利用伺服器性能,加快clone的速度。
以下是使用 Gitsync 進行多線程Clone的步驟:
- 安裝Gitsync:
pip3 install gitsync
- 編寫配置文件:
{ "github.com/user/repo": { "dst": "/path/to/clone/directory", "timeout": 10, "n_process": 4, "depth": 1, "extra": "--stategy=ours" } }
- 運行gitsync:
gitsync --conf conf.json
這裡conf.json文件中的各個參數說明如下:
- github.com/user/repo:是需要clone的項目
- dst:本地目錄
- timeout:連接超時時間,單位是秒
- n_process:同時運行clone的數量
- depth: –depth 參數,類似 –depth=1
- extra:額外的參數。可以為git clone命令提供額外的參數
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186203.html