いくつかの関連プロジェクトを含むMercurialリポジトリがあります。これらのプロジェクトの1つだけを分岐して、他の場所で作業したいと思います。
リポジトリの一部としてクローンを作成することは可能ですか?それはこれを達成するための正しい方法ですか?
必要なのは狭いクローンまたは部分的なクローンですが、残念ながらこれはまだサポートされていません。
すでに大きなリポジトリがあり、それをいくつかの小さなリポジトリに分割することが理にかなっている場合は、変換拡張機能を使用してMercurial から Mercurial への変換を行うことができます。これにより新しいリポジトリが作成され、 と の間でfoo
プッシュ/プルできないことに注意してください。your-big-repo
foo
はconvert extension
デフォルトでは有効になっていないため、リポジトリのhgrc
ファイルまたはファイルに次を追加しmercurial.ini
ます。
[extensions]
hgext.convert=
次に、map.txt
ファイルを作成します
include "libs/foo"
rename "libs/foo" .
(Windowsでもスラッシュを使用できることに注意してください)そして実行します
$ hg convert --filemap map.txt your-big-repo foo
これにより、からのフォルダーfoo
の完全な履歴を含むリポジトリが作成されます。libs/foo
your-big-repo
foo
fromのすべての証拠を削除したい場合は、ディレクトリを取り除くためにyour-big-repo
使用する別の変換を行うことができます。exclude libs/foo
そのようなリポジトリがいくつかあり、それらをまとめて使用したい場合は、subrepositoriesを検討する必要があります。この機能を使用すると、他のリポジトリをチェックアウトに含めることができます — How svn:externals
work と同様です。その wiki ページの推奨事項に従ってください。
部分的なクローンを作成する代わりに、Convert 拡張機能を使用して、リポジトリをサブ リポジトリごとに複数のリポジトリに分割できます。
具体的には、Mercurial からの変換のセクションを参照してください。
Mercurial リポジトリをフィルタリングして、既存のリポジトリのサブセットを取得することも役立ちます。たとえば、リポジトリ foo のサブディレクトリ subfoo を、独自のライフを持つリポジトリに変換するには (完全な履歴を保持しながら)、次のようにします。
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
私はこの問題に出くわし、それを行う1つの方法を見つけました:シンボリックリンクを使用する(残念ながらLinuxのみ)
たとえば/project
、リポジトリのみが必要な場合は、コンピューターでリポジトリを別のフォルダーに複製してから、ln -s /repo/location/ project
. Mercurial が処理します
hg clone
リポジトリ全体を複製することはできません。
必要に応じて、リポジトリ内にリポジトリを持つことができるサブリポジトリ拡張機能を確認できます。
これはConvert 拡張機能を使えば簡単です。