2016-09-29 6 views
4

ファイルシステムにリポジトリが格納されているので、HTTPS gitリポジトリに移行する必要があります。問題は、マイグレーションされたレポが元の175Mと比べて小さく、正確には545MBです。GIT移行レポはオリジナルよりも小さい

これは、元のレポがどのように見えるかされています

$ mkdir temp_dir && cd temp_dir 
$ git clone --mirror /path/to/original/repo 
$ cd /path/to/original/repo 
$ git remote add new-origin https://[email protected]/myuser/repo.git 
$ git push new-origin --mirror 

をそして、私は結果のレポのサイズを見れば、それはです:

$ 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 . 

これは私が続いてきた移行手順であります179MB。

ここで何が起こっているのか考えてみましょうか?

ありがとうございます。

答えて

7

複製されたリポジトリに格納された情報は、実際に複製が開始される前にパックされます。そうすれば、それは完璧に圧縮され、小さなサイズを維持しながら、すべての情報オリジナルのリポジトリを含んでいます。

しかし、元のリポジトリは時間の経過とともに進化している可能性が高いため、断片化されている可能性があり、効率的にパックすることはできません。たぶん完全にはパックされていないかもしれませんが、まだ最適化されていないオブジェクトや、もはや到達可能なオブジェクトが含まれていません。

元のリポジトリでgit gc(またはそのより積極的なオプションの1つ)を使用して、さらに縮小できるかどうかを試すことができます。

しかし結論として、クローンプロセスがエラーなく完了した場合、複製されたリポジトリには元のリポジトリのすべての情報が含まれます。つまり、ブランチやタグを使用して到達可能なすべてのコミットとそのデータが含まれます。だからあなたはそれについて心配する必要はありません。

+0

ありがとうございます!私は今よりよく眠ることができます:) – Delta

2

私は、元のリポジトリが非裸のリポジトリであり、移行されたリポジトリが裸のリポジトリであるために違いがあると言います。したがって、545MBには、移行されたリポジトリに欠けている作業ツリーのサイズが含まれています。すべてのサイズの違い帰属 - ワーキングツリーに(545メガバイト179メガバイト= 366メガバイト)は、以下の理由でもっともらしいことができます:リポジトリ内

  1. オブジェクトが圧縮されている作業ツリーには、彼らはそうではありません。したがって、十分に短い履歴および/または強く圧縮可能な内容を有するリポジトリでは、作業ツリーは、.gitの内容を顕著に超える可能性がある。

  2. 作業ツリーには、untrackedファイル(ビルド成果物など)が含まれている場合があります。

+0

複製されたリポジトリは小さいものです。したがって、リモートに作業ツリーがあっても(OPは '.git 'のサイズしかチェックしていないので、そうではありません)、説明は後方になります。 – poke

+0

@poke By *リモートリポジトリ*私は*移行されたリポジトリ*を意味します。 – Leon

+0

@poke OPは '.git'のサイズだけをチェックしません。 'tree'は' .git'に対して実行されますが、 'du'は' .'に対して実行されます – Leon

関連する問題