Git採坑與問題排查

目錄

  Case1:代碼庫中存大文件git

  

 

 

Case1:代碼庫中存大文件

背景

  有這種狀況,項目運行須要依賴一個文件(好比須要讀一個文件中的數據),那麼最直接的方式就是將該文件添加到代碼中的分支中,而後將分支代碼(包含大文件)提交到遠程版本庫中,那麼在運行項目的時候,就能夠直接讀項目中的文件了。網絡

分析

  上面的操做,實際上是不推薦的,通常是禁止的。get

  首先,大文件保存到分支中,git add、commit須要很長時間,同時還須要將代碼提交到遠程代碼庫,這就意味着,大文件須要經過網絡傳輸到遠程,這個過程也是很耗時的。文件上傳

  另外,若是將該代碼合入到master後,其餘人拉取分支的時候,也會將該大文件拉取到別人的本地代碼庫中,不管是別人pull仍是clone,拉取過程都會很耗時,由於都會把大文件pull下來。it

  還有,大文件上傳到遠端後,在拉取的代碼時候,由於文件內容過大,因此會形成遠程倉庫的負載升高,甚至形成倉庫服務不可用,以前在公司碰到過由於有兩個用戶同時從遠程倉庫拉取幾個G的代碼(多是大文件、也多是代碼量的確很大),致使整個公司的RD都沒法訪問遠程倉庫。不要認爲機器有很大帶寬就沒事,公司內網的速度但是超過10M每秒的。編譯

  最後,若是是對於須要編譯打包的文件來講,包含大文件,在打包編譯過程當中會及其耗時;在打包以前,可能有一些健康檢查、靜態檢查...都會由於代碼數據量大而增大檢查時間。ast

  因此,不要向代碼庫中保存大文件。打包

方案

  能夠考慮將文件保存在代碼之外的地方(好比專門作文件存儲的平臺),而代碼中只須要使用引用文件的地址(URI)便可,在須要的時候下載便可。下載

其餘

  若是已經將大文件保存到分支代碼中了,只要沒有將代碼提交到遠程就沒事。引用

  若是已經將大文件提交到遠程分支(已經push到遠程了),能夠嘗試將遠程的分支刪除。

  若是包含大文件的分支已經合入master,能夠進行回退,而後強制push進行刷新

相關文章
相關標籤/搜索