2017-05-29 113 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即可。就这样!

不要推其他的主人。

相关问题