2017-05-29 112 views
0

我正在嘗試將現有的存儲庫從Gitlab遷移到Github。存儲庫的大小是8GB。檢查發現,「.git」文件夾內創建的包文件大小几乎爲7.5GB。如果我刪除.git文件夾,請執行git init,然後將存儲庫推送到Github,所有提交歷史記錄和分支信息都將消失。除主分支外,還有DEV和IT分支。這是我正在做的事情:遷移GIT存儲庫保持歷史不變

  1. 存檔主分支及其所有提交歷史記錄。
  2. 創建一個新的分支,沒有任何歷史記錄,現在它將充當主分支。
  3. 刪除DEV和IT分支的歷史記錄。 這可能嗎?我只想保留主分支的提交歷史記錄,因爲它會將包文件的大小減少6 GB。
+0

你不能「保留歷史記錄,也刪除它」。爲了讓git瞭解歷史,它必須記錄發生的事情。您是否將大型二進制文件保存在存儲庫中?在這種情況下,git會存儲每個版本文件的完整副本。運行'git gc'會減小大小嗎? – Atsch

回答

0

你可以這樣做:

1.Archive的master分支的所有提交歷史。

git checkout master 
git pull origin master --rebase 
git checkout -b archived-master 

2.創建一個新的分支,沒有任何歷史,現在將充當 master分支。

3.刪除歷史DEVIT分支機構。

至於有沒有辦法刪除提交(S)的歷史單獨的一個分支,可以從DEVIT創建中介孤兒分支,刪除和中介分支分別重命名爲DEVIT,具體如下:

對於DEV:

git checkout DEV 
git pull origin DEV --rebase 
git checkout --orphan intermediary_DEV 
git commit -m "DEV with no history" 
git branch -D DEV 
git branch -m intermediary_DEV DEV 

對於IT:

git checkout DEV 
git pull origin DEV --rebase 
git checkout --orphan intermediary_IT 
git commit -m "IT with no history" 
git branch -D IT 
git branch -m intermediary_IT IT 
1

是的,你可以完全摧毀歷史上的devit分支。它可能不會更改存儲庫大小,並且不能解決核心問題:您的回購臃腫。有很多方法可以減少存儲庫的大小。

除非你的其他分支從主分支似地分歧,就像他們存儲完全不同和大型內容,而且從來沒有合併到主,從歷史中刪除不會讓存儲庫大小太大的區別。這是因爲Git歷史都是建立在彼此之上的。

一個Git倉庫的歷史看起來是這樣的:

  J - K - L     T - U [dev] 
     /  \    /
A - B - C - H - I - M - N - O - Q - R - S - V [master] 
     \     /  \ 
      ---------D - E - F - P   X - Y [it] 

分支是字面上的分支。當分支合併時,即使在分支被刪除之後分支的歷史仍然存在。新的分支機構共享以前的所有歷史。所以master依賴於它之前的每個提交。那麼devit。銷燬歷史記錄只會爲您節省tu,因爲master需要所有歷史記錄的其餘部分。


相反,你需要把你的回購飲食。

如果您的存儲庫是7.5演出其可能充滿大型文件:視頻,圖像,音頻,辦公文檔,大型壓縮文件等... Git很難與大型二進制文件,包括壓縮文件,因爲它不能存儲差異。每次他們改變它都必須存儲一個全新的副本。這可能會迅速膨脹存儲庫大小。

幸運的是,有一個解決方案,git-lfs提供「大型文件存儲」。這使您可以透明地將大文件的內容存儲在雲中,但仍可以跟蹤其在Git中的更改,並防止您的存儲庫臃腫。你可以使用它來存儲你想存儲的任何新的大文件,但是那些已經存儲的文件又如何呢?

BFG Repo-Cleaner允許您重寫您的存儲庫以執行諸如從歷史記錄中刪除文件,or change them to use git-lfs

所以你想運行BFG與--convert-to-git-lfs選項。你必須弄清楚你的回購中的哪些文件很大,並告訴BFG過濾它們。

0

每次鍵入git push origin master時,您都會將主分支推送到名爲origin的遠程設備。在這種情況下,你的起源是gitlab。所以,你只需要更新這個遙控器,或者添加一個新遙控器。讓我們嘗試添加一個新的new-origin。你只需要運行命令

git remote add new-origin https://github.com/user/repo.git 

現在你可以打開.git/config文件,看到有兩個遙控器。一個叫做origin(指向gitlab),另一個叫做new-origin(指向github)。

既然你有兩個遠程代碼,而不是推入origin的代碼,只需將代碼推入new-origin即可。就這樣!

不要推其他的主人。

相關問題