2009-10-27 13 views
15

私はバージョン管理をしたい多くの準関連プロジェクトがあります。複数ブランチ用のMercurialリポジトリレイアウト

  • 私は枝の間でファイルをコピーすることができますSVNで私は、当然のことながら、他のSVNのレイアウトは、このおもちゃ例えば可能ですが、このレイアウトは利点があり、単一のプロジェクト内

    /scripts #updates in sync with project1 & project2 
    /project1 #requires database 
    /project2 #requires database 
    /database 
    

    をとして複数のディレクトリをそれらを設定します履歴を保存している間

  • プロジェクトのサブセットのみをチェックアウトできます(例:svn co repo/project2; svn co repo/database)。 これは、project1が大きい場合は、かなりの量のストレージを節約します(&)。
  • 簡単リポジトリの管理は、ユーザーのアクセスは、すべてのプロジェクト

に一度定義されているため、このパラダイムはyou can't clone a single directory of a mercurial repo以来、Mercurialのためにもマップされません。だから私の質問は、水銀で密接に関連した大規模なプロジェクトを保存する最も一般的な方法は何ですか?

私のアイデア:

  • 複数のリポジトリは - 停滞と思われる、と私は、この拡張機能は、ほとんどと
  • 名前の枝がどのように安定したかわからない - プロジェクト
  • Forests間を移動するファイルの履歴を失います関連しないコンテンツ
  • SubRepos - 残念ながら、私はUbuntu 9.04を実行しています。これはhg 1.1.2のみです。そうでなければ、これは良いオプションのように見えるでしょう

答えて

10

複数のリポジトリ、森林とサブレポはすべて同じアイデアのバリアントです。フォレストとサブレポは、最近のバージョンの他のプロジェクトを使用しているプロジェクトを管理しやすくするだけでなく、基本的な問題を解決することはできません。

あなたの最善の策は、すべてのディレクトリを同じリポジトリに置き、Mercurial機能がサブディレクトリのチェックアウトを許可するのを待つことです。サブディレクトリの機能はMercurialのチームが気にする機能ですが、どちらもやり方が簡単ではないので、まだ完了していません。私はMercurialの内部を知っていますが、それは間違いなく実行可能です。

2番目に良い選択肢は、私が本当に醜いと思うが、あなたが言及した名前の枝のアイデアです。あなたはまだブランチ間でファイルをコピーしたいときはいつでも非常に奇妙なマージ操作を実行します。頭にHGMERGE=/bin/false hg merge -r project2

  • 元に戻す:あなたはからファイルをコピーしたいブランチのhg update -C project1
  • マージ:あなたにファイルをコピーしたいブランチの先頭へ

    1. 更新:あなたは、これらの手順を実行します枝のあなたはにファイルをコピーする:あなたはの最新リビジョンからコピーしたい特定のファイルを元に戻しhg revert -a --no-backup -r project1
    2. ブランチにマージ:hg revert --no-backup -r project2 path/to/file/in/project2.txt
    3. 移動し、それはあなたがコピーしたいブランチの場所ですにファイルそれ To:hg mv path/to/file/in/project2.txt project1/file/path/project2.txt
    4. マーク解決としてマージ:hg resolve -am
    5. そして最後に結果をコミット:hg commit -m "A merge to copy project2.txt to project1."

    私が言ったように、非常に醜いです。私は、復帰、マージ、解決の相互作用のいくつかの重要なバグがかなり最近修正されていることを知っているので、hg 1.3ではうまくいくかもしれません。 (IMHO、私はUbuntuが非bzrバージョンの制御システムのバージョンを意図的に裏付けていると思われます)

    プロジェクト間でファイルをコピーする頻度はどのくらいですか?それはなぜ起こるのだろうか?あなたは歴史を失うことが悪いことは確かですか?

    私はSubversionの中で私自身のいくつかのプロジェクトで同様のことをしてきましたが、私の経験では、何か本当にプロジェクトが本当に属していたという私の最初の気持ちは普通正しいと思います。歴史は本当に元のプロジェクトにのみ関連していたので、実際にはそれほど大したことはありませんでした。

  • +0

    ワウ、名前を付けられたブランチステップのおかげで。それは考慮するにはあまりにも醜いです。私は歴史を失うことに対処します - とにかくそれはかなりまれです。 実際、プロジェクト間の変更をマージするよりも大きな問題は、依存関係を同期させることです。私。 project1 @ r50にはデータベース@ r50が必要です。これはsvnで行うことができますが、これは上記より少し複雑なチェックアウトが必要です。 – Quantum7

    +0

    依存関係を同期させることは、SubReposとフォレストのためのものです。 – Omnifarious

    +1

    私はSubReposとForestsをMercurialのsvn:externalsの実装とみなし、Mercurialの考え方では、メタデータを暗黙のうちにファイルに格納し、特殊目的のVCSコマンドで管理する必要があります。 – Omnifarious

    関連する問題