Mercurialリポジトリには、関連するプロジェクトがいくつか含まれています。これらのプロジェクトの1つだけを分岐して他の場所で作業したいと考えています。
複製はリポジトリの一部にすぎませんか?それはこれを実現する正しい方法ですか?
欲しいのは narrowまたはpartialclone しかし、これは残念ながらまだサポートされていません。
すでに大きなリポジトリがあり、それをいくつかの小さなリポジトリに分割するのが理にかなっているとわかっている場合は、 convert extension を使用してMercurialを実行できますMercurialへの変換。これによりnewリポジトリ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
フォルダーの完全な履歴を持つリポジトリになります。
your-big-repo
からfoo
のすべての証拠を削除したい場合は、exclude libs/foo
を使用して別の変換を行い、ディレクトリを削除できます。
そのようないくつかのリポジトリがあり、それらを全体として使用する場合は、 subrepositories を確認する必要があります。この機能を使用すると、svn:externals
と同様に、他のリポジトリをチェックアウトに含めることができます。 Wikiページの recommendations に従ってください。
部分的なクローンを作成する代わりに、 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
私はこの問題に遭遇し、それを行う1つの方法を見つけました:シンボリックリンクの使用(残念ながらLinuxのみ)
たとえば、/project
リポジトリで、コンピュータのリポジトリを別のフォルダに複製してから、ln -s /repo/location/ project
。 Mercurialが処理します
(2016年後半)メインラインMercurialはまだ「狭いクローン」のサポートをパッケージ化していませんが、さまざまな方法で問題に対処するサードパーティの拡張機能があります。
狭いcheckout(別名 "スパースチェックアウト"または "ファイルパスによる部分チェックアウト")に対処できる場合は、Facebookのsparse.py
hg-experimental repository からの拡張(hgext3rd/
ディレクトリ)が機能する場合があります。このシナリオでは、完全な履歴を複製します(したがって、.hgディレクトリはそれより小さくなりません)が、作業ディレクトリは完全なリポジトリのサブセットでのみ表示/動作します。
別の方法として、Googleは NarrowHG拡張 を作成し、これによりナロークローニング(別名「ファイルパスによる部分的クローニング」)を実行します。サーバー、クライアントを制御し、実験的な機能を使用する必要がありますが、.hgにコピーされたクローンの履歴は、元のリポジトリにあったもののサブセットに制限されます。
(2019) sparse
拡張はMercurial 4. に実験的な sparse
拡張 として統合されました。 NarrowHG拡張機能はMercurial 4.6にマージされました としてhgext.narrow
拡張子。
それは不可能、 hg clone
はリポジトリ全体を複製します。
あなたはあなたのニーズに合うかもしれないリポジトリ内にリポジトリを持つことを可能にするサブリポジトリ拡張を見てみることができます。
これは 変換拡張 で簡単です。