迁移GIT存储库保持历史记录不变

时间:2017-05-29 16:31:15

标签: git github gitlab git-branch

我正在尝试将现有存储库从Gitlab迁移到Github。存储库的大小为8GB。在检查时发现在" .git"内创建的包文件的大小。文件夹几乎7.5gb。如果我删除.git文件夹,执行git init,然后将存储库推送到Github,则所有提交历史记录和分支信息都将消失。除主分支外,还有DEV和IT分支。这就是我要做的事情:

  1. 归档主分支及其所有提交历史记录。
  2. 创建一个没有任何历史记录的新分支,现在它将作为主分支。
  3. 删除DEV和IT分支的历史记录。 这可能吗?我只想保留master分支的提交历史记录,因为它会将pack文件的大小减少6 gb。

3 个答案:

答案 0 :(得分: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等操作。

因此,您希望使用--convert-to-git-lfs选项运行BFG。您必须弄清楚repo中的哪些文件很大,并告诉BFG过滤它们。

答案 1 :(得分:0)

你可以这样做:

1.将master分支及其所有提交历史记录存档。

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

2.创建一个没有任何历史记录的新分支,现在将作为分支    master分支。

git checkout master
git checkout --orphan latest_master
git commit -m "master with no history"
git branch -D master
git branch -m latest_master master

3.删除DEVIT分支的历史记录。

由于无法单独删除分支的提交历史记录,您可以从DEVIT创建中间孤立分支,删除它们并将中间分支重命名为{{ 1}}和DEV分别如下:

对于DEV:

IT

对于IT:

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

答案 2 :(得分: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。这就是全部!

不要推动掌握的其他分支。