Git遠程文件較大,如何順利拉取代碼?

原理

讀過《Pro Git》這本書的同學,應該對Git文件存儲方式有一定的瞭解。如果一個項目存在時間較久,期間不可避免的要創建很多的分支並且有相當可觀的代碼提交歷史。

此時,如果直接clone下來整個倉庫。將包含所有的提交記錄。其體積是相當可觀的。至於爲什麼超過1G就難以clone。我暫時也不清楚原理。有知道的同學歡迎留言。

那解決方式就是先下載一部分,然後根據需要看是否要將其他部分也下載放在本地。

代碼如下:

git clone --depth 1 https://github.com/dogescript/xxxxxxx.git

depth:深度。顧名思義,就是分支的提交記錄。後面是1,就是隻下載最近一次提交代碼的分支的最近一條記錄。用log查看只能看到一條提交記錄。

隱藏的一層意思是:最近一次有提交記錄的分支。只會下載這一個分支的代碼,並且只同步最近一次的提交。這樣,整個下載的文件就小了很多。根據經驗,絕不會超過1G。否則,說明你的代碼庫文件太多了。

好。現在代碼拉下來了。

但這個分支不一定是你需要的分支,怎麼辦呢?

此時你需要切換到你需要的分支上去。

代碼如下:

$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name

remote_branch_name:遠程分支的名字。

這樣,你就可以任意從遠端拉去分支代碼了。

但:分支的log,無論是之前的分支,還是新拉取的分支,都只有一條提交記錄。那麼你想查看多條要怎麼辦呢?

git fetch --unshallow

如果源存儲庫已完成,請將淺存儲庫轉換爲完整存儲庫,從而消除淺存儲庫所施加的所有限制。

如果源存儲庫很淺,則儘可能多地獲取,以便當前存儲庫與源存儲庫具有相同的歷史記錄。

然而,這個會去拉取所有的記錄。可想而知,如果所有的記錄可以同步下來,我們也就不用這樣折騰了。所以,此時用這個命令解決不了問題。

當然,如果情況是你先獲取了遠端庫的一部分,想全部同步過來,且整個庫體積不大。這個方法可以用來同步所有的記錄。

git fetch --depth=100

從遠端抓取100條提交記錄。如果不夠,可以適當調整條數,但注意,不可過大。避免又發生體積過大而操作不成功的問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章