web-dev-qa-db-ja.com

Mercurialでリポジトリのサブフォルダを複製するにはどうすればよいですか?

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

複製はリポジトリの一部にすぎませんか?それはこれを実現する正しい方法ですか?

61
James Hopkin

欲しいのは narrowまたはpartialclone しかし、これは残念ながらまだサポートされていません。

すでに大きなリポジトリがあり、それをいくつかの小さなリポジトリに分割するのが理にかなっているとわかっている場合は、 convert extension を使用してMercurialを実行できますMercurialへの変換。これによりnewリポジトリ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

これにより、foolibs/fooyour-big-repoフォルダーの完全な履歴を持つリポジトリになります。

your-big-repoからfooのすべての証拠を削除したい場合は、exclude libs/fooを使用して別の変換を行い、ディレクトリを削除できます。

そのようないくつかのリポジトリがあり、それらを全体として使用する場合は、 subrepositories を確認する必要があります。この機能を使用すると、svn:externalsと同様に、他のリポジトリをチェックアウトに含めることができます。 Wikiページの recommendations に従ってください。

53
Martin Geisler

部分的なクローンを作成する代わりに、 Convert Extension を使用して、リポジトリをサブリポジトリごとに複数のリポジトリに分割できます。

具体的には、セクション 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
12
Nathan Lee

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

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

6
TheLQ

(2016年後半)メインラインMercurialはまだ「狭いクローン」のサポートをパッケージ化していませんが、さまざまな方法で問題に対処するサードパーティの拡張機能があります。

狭いcheckout(別名 "スパースチェックアウト"または "ファイルパスによる部分チェックアウト")に対処できる場合は、Facebookのsparse.pyhg-experimental repository からの拡張(hgext3rd/ディレクトリ)が機能する場合があります。このシナリオでは、完全な履歴を複製します(したがって、.hgディレクトリはそれより小さくなりません)が、作業ディレクトリは完全なリポジトリのサブセットでのみ表示/動作します。

別の方法として、Googleは NarrowHG拡張 を作成し、これによりナロークローニング(別名「ファイルパスによる部分的クローニング」)を実行します。サーバー、クライアントを制御し、実験的な機能を使用する必要がありますが、.hgにコピーされたクローンの履歴は、元のリポジトリにあったもののサブセットに制限されます。

(2019) sparse拡張はMercurial 4. に実験的な sparse拡張 として統合されました。 NarrowHG拡張機能はMercurial 4.6にマージされました としてhgext.narrow拡張子。

3
Anon

それは不可能、 hg cloneはリポジトリ全体を複製します。

あなたはあなたのニーズに合うかもしれないリポジトリ内にリポジトリを持つことを可能にするサブリポジトリ拡張を見てみることができます。

3
Romain

これは 変換拡張 で簡単です。

2
cheenu