Mercurial リポジトリのメンテナンス

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

robotsnoindex
robotsnoindex

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 を開くには、次の操作を行います。

  1. スタート ボタンをクリックします。
  2. [Search programs and files] フィールドに「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 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 リポジトリをチェック インできます。

最終更新日 2020 年 6 月 24 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.