git只拉取github部分程式碼的方法

weixin_33816946發表於2018-08-05

需求:github某個專案所有程式碼太大,有600+M,甚至更大;只需要拉取部分程式碼,一是可以降低網路消耗,二是可以降低磁碟佔用

 

分析了下空間佔用情況:發現每個專案下的.git/objects/pack都很大,這應該是git的機制,使用git就避免不了下載這個東西,所以降低網路消耗的需求暫時滿足不了,後續再研究吧

~/gitlab/druid/.git/objects/pack

 

方法一:參考 https://blog.csdn.net/u022812849/article/details/53025248

但是隻解決了本地磁碟的佔用的問題;沒有解決網路消耗的問題,因為從下圖可以看到,中間還是把整個內容下載了一遍,沒有節省網路消耗。感覺這樣,還不如全部下載下來,然後刪除不需要的內容來的簡單

例項

下面以克隆開源專案druid下的/druid/doc目錄為例。

$ mkdir druid
$ cd druid  
$ git init // 初始化空倉庫
$ git remote add -f origin https://github.com/alibaba/druid.git // 關聯遠端地址 ,這一步不要終止執行,不然下面操作無效
$ git config core.sparsecheckout true // 開啟Sparse Checkout模式
$ echo "doc" >> .git/info/sparse-checkout // 設定需Check Out的檔案。直接從專案目錄下開始
$ git pull origin master // Check Out
... ...

Receiving objects: 100% (111624/111624), 51.91 MiB | 227.00 KiB/s, done. 檔案大小111624,全部下載下來了

 

另外一旦設定拉取的檔案後,後續就不能再新增或者減少拉取或者提交的程式碼範圍,修改sparse-checkout無效。除非按照步驟再來一遍echo "doc" >> .git/info/sparse-checkout // 設定需Check Out的檔案

 

其實這可以用於合作開發的專案中,每個專案成員只拉取自己的程式碼部分,然後提交的時候也只提交自己的程式碼部分。減少誤操作的可能性

 

相關文章