提高GitClone速度的方法

一、網路優化

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:

  1. 安裝git-lfs。具體安裝步驟參閱:https://git-lfs.github.com/。
  2. 確保Git LFS文件正確地提交到倉庫。在提交前,請使用以下命令將您的大文件標記為「指針」:
  3. git lfs track "*.mp4"
  4. 提交更改,並push到遠程倉庫。

四、使用 Gitsync 進行多線程Clone

大型代碼庫的Clone非常耗時間,尤其是在有些環境下Git伺服器的帶寬受到限制。在這種情況下,您需要讓Clone並行,以加速clone速度。Gitsync 工具提供了一種自動化多線程Clone方法。Gitsync 並行clone多個時可以充分利用伺服器性能,加快clone的速度。

以下是使用 Gitsync 進行多線程Clone的步驟:

  1. 安裝Gitsync: pip3 install gitsync
  2. 編寫配置文件:
    {
        "github.com/user/repo": {
            "dst": "/path/to/clone/directory",
            "timeout": 10,
            "n_process": 4,  
            "depth": 1,
            "extra": "--stategy=ours"
    
        }
    }
     
  3. 運行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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:44
下一篇 2024-11-27 05:44

相關推薦

  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 用法介紹Python集合update方法

    Python集合(set)update()方法是Python的一種集合操作方法,用於將多個集合合併為一個集合。本篇文章將從以下幾個方面進行詳細闡述: 一、參數的含義和用法 Pyth…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟體。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29

發表回復

登錄後才能評論