Mercurial リポジトリのメンテナンス
2020 年 6 月 30 日で Mercurial のサポートを終了します
Mercurial の機能およびリポジトリは 2020 年 6 月 30 日に、Bitbucket および Bitbucket API から削除されます。Bitbucket で新しい Mercurial リポジトリを作成する機能は 2020 年 2 月 1 日に無効化されました。詳細情報
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 分割 を参照してください。
大規模ファイルを見つける方法
大規模ファイルとは、一般的にサードパーティ製のライブラリ(jar ファイル、dll ファイル)、アプリケーションのコンパイル済みバージョン、(画像ファイルのような)バイナリ形式のメディア資産などです。通常、Mercurial はファイルの差分を保存するので、注意が必要です。バイナリ ファイルの内容を少し変更すると、多くのファイル、または大半のファイルでバイト数が変わる可能性があります。バイナリ ファイルに変更をコミットすることにより、Mercurial が大規模なファイルの全体または大半を複数回保存する可能性があります。
Linux 環境の場合
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
Windows 環境の場合
Windows 環境では、PowerShell を使用することを推奨します。Windows 7 で PowerShell を開くには、次の操作を行います。
- スタート ボタンをクリックします。
- [Search programs and files] フィールドに「
Powershell
」と入力します。 - Windows PowerShell オプションを選択します。
PowerShell コマンド ウィンドウが開きます。 - リポジトリのルートに変更します。
コマンドプロンプトで次のように入力します。
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 AM 548107 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 AM 91116 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
大規模ファイルの削除
大規模なファイルを削除するには、convert
エクステンションと --filemap
オプションを使用します。convert
エクステンションはリポジトリをフィルタリングし、同じ履歴を持つ新しいリポジトリを作成します。--filemap
オプションは、ファイル処理用のフィルターを指定する filemap
ファイルを使用します。変換処理時、convert エクステンションは filemap
を使用して、処理するチェンジセットを修正します。filemap を使用して、個別のファイルやディレクトリ全体を含めたり、名前を変更したり、除外したりできます。
例として、filemap
ディレクティブの簡単なセットを示します。
# 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
リポジトリをチェック インできます。