Mercurial:木の後ろの森を見る方法は?

Mercurial (別名Hg )は、非常に優れた分散バージョン管理システム(分散VCS)です。 一般的なDVCS、特にHgの快適性の中でも、高い柔軟性が強調されています。 リポジトリは好きな名前で呼び出したり、どこにでもコピーしたり、任意のチェーン(たとえばQAを介して、または直接)でプロダクションにコミットしたりできます。

さて、リポジトリもネストできます。 たとえば、プロジェクトはいくつかの小さなプロジェクトで構成されているか、サードパーティ製品が含まれています。 モジュール開発者にとっては、プロジェクト全体ではなく、その部分で作業する方が便利です。 これらの場合、リポジトリを組み合わせることができます。

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 / onerepo-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

Source: https://habr.com/ru/post/J29494/


All Articles