62

いくつかの関連プロジェクトを含むMercurialリポジトリがあります。これらのプロジェクトの1つだけを分岐して、他の場所で作業したいと思います。

リポジトリの一部としてクローンを作成することは可能ですか?それはこれを達成するための正しい方法ですか?

4

6 に答える 6

53

必要なのは狭いクローンまたは部分的なクローンですが、残念ながらこれはまだサポートされていません。

すでに大きなリポジトリがあり、それをいくつかの小さなリポジトリに分割することが理にかなっている場合は、変換拡張機能を使用して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 ページの推奨事項に従ってください。

于 2009-05-28T15:33:19.983 に答える
12

部分的なクローンを作成する代わりに、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
于 2009-06-06T03:51:33.383 に答える
6

私はこの問題に出くわし、それを行う1つの方法を見つけました:シンボリックリンクを使用する(残念ながらLinuxのみ)

たとえば/project、リポジトリのみが必要な場合は、コンピューターでリポジトリを別のフォルダーに複製してから、ln -s /repo/location/ project. Mercurial が処理します

于 2011-01-31T03:13:16.590 に答える
3

hg cloneリポジトリ全体を複製することはできません。

必要に応じて、リポジトリ内にリポジトリを持つことができるサブリポジトリ拡張機能を確認できます。

于 2009-05-28T11:58:36.703 に答える
2

これはConvert 拡張機能を使えば簡単です。

于 2010-04-30T02:48:04.093 に答える