GIT迁移回购比原来小

时间:2016-09-29 11:09:44

标签: git gitlab

我有一个存储在文件系统上的存储库,我需要将其迁移到HTTPS git存储库。问题是迁移的回购比原来的小,179M对545 MB是准确的。

这是原始回购的样子:

$ tree -L 2 .git

.git/
├── branches
├── config
├── FETCH_HEAD
├── HEAD
├── hooks
├── index
├── logs
│   └── refs
├── objects
│   ├── incoming_1638816568970138516.pack
│   ├── incoming_2231423675192085195.pack
│   ├── incoming_252567842603709439.pack
│   ├── incoming_2956015230264054740.pack
│   ├── incoming_3048626775278812485.pack
│   ├── incoming_3322152774343971530.pack
│   ├── incoming_3707332777993276763.pack
│   ├── incoming_407171399829023385.pack
│   ├── incoming_4072000993266381297.pack
│   ├── incoming_4293432441900999175.pack
│   ├── incoming_4833572675284287989.pack
│   ├── incoming_4943537936436869872.pack
│   ├── incoming_5555086829860720971.pack
│   ├── incoming_5912835395946639495.pack
│   ├── incoming_7273182803237175093.pack
│   ├── incoming_7510898138918506599.pack
│   ├── incoming_7865231230366160752.pack
│   ├── incoming_8724975206375007218.pack
│   ├── incoming_8787762604831244623.pack
│   ├── incoming_9046531469688239004.pack
│   ├── info
│   └── pack
└── refs
    ├── heads
    ├── remotes
    └── tags


$ git branch -a

  cli
  max
  codefactoring
* master
  new-load-configuration
  new-loader
  plugins_dev
  remotes/origin/cli
  remotes/origin/max
  remotes/origin/codefactoring
  remotes/origin/master

$ du -sh .
545M    .

这是我遵循的迁移程序:

$ mkdir temp_dir && cd temp_dir
$ git clone --mirror /path/to/original/repo
$ cd /path/to/original/repo
$ git remote add new-origin  https://myuser@my.source.server/myuser/repo.git
$ git push new-origin --mirror

然后,如果我看看最终的回购大小,那就是179MB。

知道这里发生了什么事吗?

谢谢。

2 个答案:

答案 0 :(得分:10)

克隆存储库中存储的信息在克隆实际启动之前打包。这样,它完全压缩并保持小尺寸,同时包含原始存储库的所有信息

然而,原始存储库可能会随着时间的推移而发展,因此它可能是碎片化的,无法有效地打包。也许它根本没有完全打包,但包含仍然未经优化的对象,甚至不再可达的对象。

您可以尝试在原始存储库中使用git gc(或其中一个更具攻击性的选项),看看是否可以进一步缩小它。

但最重要的是,如果克隆过程完成且没有错误,则克隆的存储库将包含原始存储库的所有信息。也就是说,将包括使用分支或标记可到达的每个提交及其数据。所以你不必担心它。

答案 1 :(得分:2)

我想说的不同之处在于,您的原始存储库是非裸存储库,而迁移存储库是裸存储库。因此,545MB包括工作树的大小,迁移的仓库中缺少该大小。由于以下原因,将所有大小差异(545MB - 179MB = 366MB)归因于工作树可能是合理的:

  1. 存储库中的对象在工作树中被压缩,而不是。因此,在具有足够短的历史和/或强可压缩内容的存储库中,工作树可以显着超过.git的内容。

  2. 工作树可能包含未跟踪的文件(例如构建工件)。