さて、リポジトリもネストできます。 たとえば、プロジェクトはいくつかの小さなプロジェクトで構成されているか、サードパーティ製品が含まれています。 モジュール開発者にとっては、プロジェクト全体ではなく、その部分で作業する方が便利です。 これらの場合、リポジトリを組み合わせることができます。
2つのリポジトリが互いに埋め込まれている場合、Mercurialはそれらを分離して検討します。 外部リポジトリに宛てられたコマンドは、サブリポジトリには適用されません。 しかし、プロジェクトが孤立したフラグメントに断片化されている場合、プロジェクトを管理するにはどうすればいいですか? または、言い換えれば、樹木(リポジトリ)の背後にある森(プロジェクト)をどのように見て、そのレベルで作業するのでしょうか? Mercurialの拡張機能であるForestExtensionは、苦痛から私たちを救います。 このフォレストは、ベースと同一のいくつかのコマンドを追加しますが、リポジトリのネストを考慮します。
大規模な複合プロジェクトを家に持ち帰り、すべてのモジュールのファイルを修正し、それらを元に戻したいとします。
fclone
(フォレストクローン)コマンドはネストされたリポジトリの「フォレスト」(つまりプロジェクト)をコピーし、
fstatus
(フォレストステータス)コマンドは「フォレスト」全体の状態を表示します(何かをコミットする必要がありますか?)、そして
fpush
(フォレストプッシュ)プッシュ変更されたすべてのファイルを元に戻し、「フォレスト」全体に対して一度にこれを行います。 カタログをクロールする必要はありません。 この場合、「戻る」とは、プロジェクトの元のパブリックな「フォレスト」に対するものです。 そこからサードパーティのリポジトリに変更をプッシュしたい場合は、プロジェクトのフレームワーク内で同じ
fpush
を繰り返すだけで十分です-これで完了です。
それぞれがテキストファイルを持つ2つのリポジトリを作成しましょう。
$ mkdir repo-one
$ cd repo-one
$ hg init
$ echo "hello" > hello.txt
$ hg ci -m"init one"
$ cd ..
$ mkdir repo-two
$ cd repo-two
$ hg init
$ echo "hello" > hello.txt
$ hg ci -m"init two"
$ cd ..
最初のリポジトリを2番目のリポジトリ内にコピーします。
$ hg clone repo-one repo-two/one
repo-two / oneは repo-twoの一部ではなく、単にネストされていることを忘れないでください。
そして今、森が登場します。
fclone
コマンド
fclone
cloneコマンドに似ていますが、ネストされたリポジトリを無視しません。
$ hg fclone repo-two wc-two
repo-two / one ( repo-oneのコピー)を含む、 repo-twoのローカルコピーを作成しました。
repo-two / hello.txtおよびrepo-two / one / hello.txtにいくつかの変更を加えます(リストは省略します)。
各リポジトリの変更を個別にコミットします(
commit
コマンドの「フォレスト」類似物が存在しない理由を推測するのは簡単です):
$ cd wc-two/ && ls
one hello.txt
$ hg ci -m"edited hello.txt"
$ cd one/
$ hg ci -m"edited hello.txt"
$ cd ..
結果をrepo-twoにプッシュします。
$ hg fpush
これで、 repo-twoには変更されたファイルrepo-two / hello.txtおよびrepo-two / one / hello.txtが含まれるようになりました 。
次のステップは、変更をさらにプッシュすることです。 レポワンで :
$ cd ../repo-two
$ hg fpush
完了 現在、 repo-two / oneからrepo-oneに渡された変更。 以上です。
repo-two / oneの代わりに、ツリーのセット全体が存在する場合があり、
fpush
それらすべて
fpush
処理します。
(元のトピックはここにあります: http : //neithere.livejournal.com/381205.html )