7

Mercurial 経由で追跡されるソース ファイルにカスタム メタデータを添付する必要があります。svn プロパティコマンドはまさに私が必要としているものです。

propsetpropget、などのコマンドを提供する Mercurial 拡張機能はありますpropdelか?

拡張機能がない場合、それはなぜですか?
Mercurial を使用する場合、カスタム メタデータの代替/より良いアプローチはありますか?
カスタム メタデータは他のユーザーにとって役に立ちませんか?
拡張機能は切望されていますが、まだ書かれていませんか?

追加情報: 役立つ場合。私が追跡しているメタデータは、各ファイルがコードレビュー、単体テスト、qa などされているかどうかです。このデータは追跡可能である必要があり、ブランチ/クローン間のマージは十分に細かく設定されていません。

4

3 に答える 3

4

Mercurial の規則では、ファイル名.hg*をリポジトリのルートに配置し、それらを (何らかの) 辞書として使用して、ファイル名をプロパティ値にマップします。たとえばsvn:eol-style、hgeol 拡張子の代わりに.hgeolファイルを使用します。

コード レビューを追跡する場合は、このメタデータを操作できる別の拡張機能を作成し、その拡張機能にその状態をマージしやすい形式で保存させることをお勧めします。

于 2010-12-14T22:40:40.947 に答える
4

Mercurial の哲学は、ファイルを追跡し、ファイルのみを追跡するというものです。Mercurial はフォルダを認識しないため、空のフォルダをチェックインすることさえできません!

だから、ここに答えがあります:

  • あなたが望むことをする拡張機能が見つかりません。(もちろん自分で書いても構いません。)

  • あなたが望むことを行うMercurialfulの方法は、データをフラットファイルに保存し、いくつかのスクリプトを使用してそれを処理することです. :(

あなたの会社ではかなりよく考え抜かれたシステムと優れたエンジニアリング プラクティスを導入しているように聞こえるので、ここでは衒学的な説明はしませんが、あなたの方法は移植性を損なう以外に何もしないという合理的な議論をすることができます。プロパティについて魔法のようなことは何もありませんsvn proplist -v .。ツリーで を実行し、それを隠しファイルにダンプし.trackingます。たとえば、通常のファイルと明示的にマージするだけです。とにかくプロパティをマージする必要があるため、これは実際には何の作業も追加しません。

それがうまくいくことを願っています!

于 2010-12-14T22:51:12.183 に答える
0

私を含め、非常に多くの Mercurial を使用している人々が、次のような他のツールを使用した後、私たちが持ちたいもの、持つことを期待しているものであるため、この質問に非常に遅い準回答を追加します。 svn プロパティ。

私の知る限り、Mercurial にはそのような拡張機能はありません。まだ。

はい、Mercurial の方法では、ファイルとファイルのみを追跡するようです。そして、そのような拡張子を正す方法は、必要なメタデータを ...repo/.hg* ファイルに入れることかもしれません。

わかった。私はそれで遊んでいます。ツールを作成する前に、手作業で作業を行います。

バージョン管理された .hg ファイル アプローチの主な弱点は、「hg update -r OLD-VERSION」などの非ヒント バージョンをチェックアウトすると、古いバージョンのメタデータが取得されることです。

したがって、重要なことは、メタデータを ...repo/.hg* ファイルに入れることだと思います。

しかし...ほとんどの操作は、そのようなファイルの最新バージョンで、または最新バージョンで実行する必要があります。つまり、そのようなメタデータ ファイルはバージョンを「超える」と思います。つまり、バージョンを管理したいのですが、理想的な状況では、古いバージョンをチェックアウトした可能性のある、通常はバージョン管理されているファイルにオーバーレイされていると想像できます。

さらに、多くの場合、そのようなメタデータ ファイルの分岐を個別に処理する必要があります。たとえば、すべてのブランチの説明を一緒に書き込もうとしているファイルを想像してみてください。おそらく、「branch1.1 は branch1 の最新バージョンです」のように、ブランチを比較します。その説明がどちらのブランチにもあることは望ましくありません。または、両方の枝に同時に適用し、両方の枝に変更を反映させたいと考えています。

そのような推定上の拡張は、「hg cat -r tip ...repo/.hg-my-new-metadata」で動作します。または、バージョン管理されたファイルを、通常のバージョンを超えるメタデータ ファイルで何らかの方法でオーバーレイします。

サブレポでこれを行う上で、いくつかの進歩を遂げました:

superrepo
   files // normally-versioned-files <-- a subrepo
   metadata // version transcending metadata <-- a subrepo

これにより、古いバージョンのファイルと一緒に最新のメタデータをチェックアウトできます

スーパーレポの特定のバージョンをチェックアウトすると、古いバージョンのメタデータ サブレポが取得される可能性があるため、まだ十分ではありません。しかし、少なくとも新しいバージョンはサブレポにあります。

また、メタデータを隣接するサブレポに配置するか、同じレポに保持するか (ただし、ヒントで操作するか) にかかわらず、実行できる問題があることに注意してください。

hg clone -r OLD-REVISION repo newrepo

これにより、OLD-REVISION 以降のメタデータが取り除かれます。「OLD-REVISION はすべてのテストに合格した」というメタデータを含めます。つまり、OLD-REVISION に適用される可能性のある後のリビジョンからメタデータを取り除きます。

これと同じ問題が hg タグでも発生します。

「まあ、そんなことはしないでください」と言う人もいるかもしれませんが、履歴を削除しないでください。残念ながら、これはリポジトリを「整理」する方法として推奨されることがよくあります。

Mercurial でこれを回避するのは難しいようです。

于 2012-07-26T23:42:05.673 に答える