Maintaining a Mercurial Repository

このページの内容

You should do regular maintenance of your Mercurial repository to reduce its size.  If you imported code from another version control system, you may need to clean up unnecessary files after the import.  This explains how to reduce repository size by removing large files from a Mercurial repo and contains the following topics:

リポジトリのサイズを縮小するもう一つの方法は、リポジトリを複数の小さなリポジトリに分割することです。この方法はリポジトリ内のディレクトリごとに実行可能で、ディレクトリごとにサブリポジトリを作成します。リポジトリの分割に関する詳細については、リポジトリの 2 分割 を参照してください。

How to Find Large Files

大規模ファイルとは、一般的にサードパーティ製のライブラリ(jar ファイル、dll ファイル)、アプリケーションのコンパイル済みバージョン、(画像ファイルのような)バイナリ形式のメディア資産などです。通常、Mercurial はファイルの差分を保存するので、注意が必要です。バイナリ ファイルの内容を少し変更すると、多くのファイル、または大半のファイルでバイト数が変わる可能性があります。バイナリ ファイルに変更をコミットすることにより、Mercurial が大規模なファイルの全体または大半を複数回保存する可能性があります。  

In a Linux Environment

Linux 環境で大規模ファイルを検索するには、次のパイプ コマンドを使用します。

$ find . -type f \( ! -regex ".*/\..*" \) -print | xargs ls -l | sort -k5,5rn | head

このコマンドは非表示ファイルとディレクトリを無視します。たとえば、このコマンドは .hg ディレクトリ内のすべてを無視します。ls の出力をサイズ順で並び替えし、head コマンドを使用して、上位 10 個の大規模ファイルを返します。たとえば、現在の Bitbucket チュートリアル リポジトリには、次の大規模ファイルがあります。

-rwxr-xr-x 1 manthony staff 548107 Feb 12 11:18 ./yearone.html
-rw-r--r-- 1 manthony staff 205672 Feb 12 11:18 ./images/mahmoud-darwish.gif
-rw-r--r-- 1 manthony staff 155848 Feb 12 11:18 ./images/so_many_activities.jpg
-rw-r--r-- 1 manthony staff 149472 Feb 12 11:18 ./images/EleanorRoosevelt.png
-rw-r--r-- 1 manthony staff 122251 Feb 12 11:18 ./images/AmbroseBierce.gif
-rw-r--r-- 1 manthony staff 112894 Feb 12 11:18 ./javascripts/foundation.js
-rw-r--r-- 1 manthony staff 109986 Feb 12 11:18 ./images/Deep-Thought.png
-rw-r--r-- 1 manthony staff 88873 Feb 12 11:18 ./images/AlbertEinstein.png
-rw-r--r-- 1 manthony staff 88387 Feb 12 11:18 ./images/willferrell.png
-rw-r--r-- 1 manthony staff 87721 Feb 12 11:18 ./images/NeilTysonOriginsA-FullSize.jpg

In a Windows Environment

Windows 環境では、PowerShell を使用することを推奨します。Windows 7 で PowerShell を開くには、次の操作を行います。

  1. スタート ボタンをクリックします。
  2. プログラムとファイルの検索フィールドで、PowerShell と入力します。
  3. Windows PowerShell オプションを選択します。
    PowerShell コマンド ウィンドウが開きます。 
  4. リポジトリのルートに変更します。
  5. コマンドプロンプトで次のように入力します。

    gi -Path .\* -Exclude .hg | gci -r -ea 0 | sort Length -desc | select -f 10

    このコマンドは、.hg(メタデータ)ディレクトリのファイルを除く、リポジトリのファイルすべてを一覧表示します。システムは次のような出力を一覧表示します。

        Directory: C:\Users\manthony\Documents\tutorials
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a---3/25/2013 10:00 AM548107 yearone.html
    
     Directory: C:\Users\manthony\Documents\tutorials\images
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a---3/25/2013 10:00 AM 205672 mahmoud-darwish.gif
    -a--- 3/25/2013 10:00 AM 155848 so_many_activities.jpg
    -a--- 3/25/2013 10:00 AM 149472 EleanorRoosevelt.png
    -a--- 3/25/2013 10:00 AM 122251 AmbroseBierce.gif
    
     Directory: C:\Users\manthony\Documents\tutorials\javascripts
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a--- 3/25/2013 10:00 AM 112894 foundation.js
    
    Directory: C:\Users\manthony\Documents\tutorials\images
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a--- 3/25/2013 10:00 AM 109986 Deep-Thought.png
    
    Directory: C:\Users\manthony\Documents\tutorials
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a---3/25/2013 10:00 AM91116 index.html
    
     Directory: C:\Users\manthony\Documents\tutorials\images
    
    Mode LastWriteTime Length Name
    ----------------------- ----
    -a---3/25/2013 10:00 AM 88873 AlbertEinstein.png
    -a---3/25/2013 10:00 AM 88387 willferrell.png

Removing Large Files

大規模ファイルを削除するには、convert エクステンションと --filemap オプションを使用します。convert エクステンションはリポジトリをフィルタリングし、並列履歴を持つ新しいリポジトリを作成します。--filemap オプションでは、ファイル処理用のフィルターを指定する filemap ファイルを使用します。変換処理時、convert エクステンションは filemap を使用して、処理するチェンジセットを修正します。filemap を使用すれば、個別のファイルやディレクトリ全体を含めたり、名前を変更したり、除外したりできます。

For example, the following shows the a simple set of filemap directives:

# Comment
include path/to/file
exclude path/to/file
rename from/file to/file

convert エクステンションと --filemap オプションの詳細については、ConvertExtension --filemap ドキュメントを参照してください。

変換によってリポジトリのファイルを縮小する例

次のようなディレクトリ構造のリポジトリを考えてみましょう。

repo
│─ doc
│─ commons-collections-3.2.1-javadoc.jar
│─ commons-io-2.0.1-javadoc.jar
└─ commons-lang-2.6-javadoc.jar
│─ lib
│─ commons-collections-3.2.1.jar
│─ commons-io-2.0.1.jar
└─ commons-lang-2.6.jar
└─ src
│─ commons-collections-3.2.1-sources.jar
│─ commons-io-2.0.1-sources.jar
└─ commons-lang-2.6-sources.jar

commons-lang 以外のすべてのライブラリを削除し、commons-io 用を除くすべての Javadoc を保持するには、リポジトリ ルートに次の filemap.txt ファイルを作成します。

include "repo"
exclude "repo/lib"
include "repo/lib/commons-lang-2.6.jar"

# the following include is optional
include "repo/doc"
exclude "repo/doc/commons-io-2.0.1-javadoc.jar"

次に、構造を変換するには、コマンドラインで次のコマンドを発行します。

hg convert --filemap filemap.txt initialHgRepo hgRepoAfterConversion

initialHgRepo は変換するリポジトリで、hgRepoAfterConversion は新しいリポジトリです。変換後の hgRepoAfterConversion リポジトリの構造は次のとおりです。

repo
│─ doc
│─ commons-collections-3.2.1-javadoc.jar
└─ commons-lang-2.6-javadoc.jar
│─ lib
└─ commons-lang-2.6.jar
└─ src
│─ commons-collections-3.2.1-sources.jar
│─ commons-io-2.0.1-sources.jar
└─ commons-lang-2.6-sources.jar

これで hgRepoAfterConversion リポジトリをチェックできます。

最終更新日 2016 年 11 月 22 日

この翻訳に満足しましたか?

はい
いいえ
この記事についてのフィードバックを送信する

Not finding the help you need?

コミュニティへの質問

Powered by Confluence and Scroll Viewport.