いくつかの関連プロジェクトを含むMercurialリポジトリがあります。これらのプロジェクトの1つだけを分岐して、他の場所で作業したいと思います。
リポジトリの一部としてクローンを作成することは可能ですか?それはこれを達成するための正しい方法ですか?
必要なのは狭いクローンまたは部分的なクローンですが、残念ながらこれはまだサポートされていません。
すでに大きなリポジトリがあり、それをいくつかの小さなリポジトリに分割することが理にかなっている場合は、変換拡張機能を使用してMercurial から Mercurial への変換を行うことができます。これにより新しいリポジトリが作成され、 と の間でfooプッシュ/プルできないことに注意してください。your-big-repofoo
は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/fooyour-big-repo
foofromのすべての証拠を削除したい場合は、ディレクトリを取り除くためにyour-big-repo使用する別の変換を行うことができます。exclude libs/foo
そのようなリポジトリがいくつかあり、それらをまとめて使用したい場合は、subrepositoriesを検討する必要があります。この機能を使用すると、他のリポジトリをチェックアウトに含めることができます — How svn:externalswork と同様です。その 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 拡張機能を使えば簡単です。