2010-12-16 19 views
18

私のプロジェクトは現在、これらのフォルダのそれぞれが完全に独立のMercurialリポジトリで次の場所水銀サブリポジトリは、メインリポジトリのサブディレクトリでなければなりませんか?

C:\Dev\ProjectA 
C:\Lib\LibraryB 
C:\Lib\LibraryC 

のコードで構成されています。プロジェクトAは常に変化し、図書館Bと図書館Cはほとんど変わりません。

私は現在、リリースされているProject Aの各バージョンにタグをつけています(覚えていれば)、対応するタグをライブラリBとCのリポジトリに入れます。

サブリポジトリを使用してこれを改善できますか?ライブラリAとライブラリCをプロジェクトAのサブディレクトリにする必要がありますか?

ライブラリBとCがプロジェクトAのサブディレクトリでなければならない場合、ライブラリBを使用するプロジェクトDを開始したいが、それ以外の場合はプロジェクトAには全く関係していない。

答えて

18

図書館BとCは、私は ライブラリBを使用していますが、それ以外のすべてのプロジェクトAと提携 ではないことをプロジェクトDを開始したい場合、私は何をし んプロジェクトAの サブディレクトリである必要がありますか?

任意のプロジェクトは、同時に他のプロジェクトのsubrepositoryとして独立両方が存在することができます。ワークフローを提案して説明します。

まず第一に、あなたのプロジェクトの各(A、B、C)のどこかに公開されて祝福されたリポジトリが必要です。

blessed repository

をあなた自身のサーバー上でhgwebdirを実行し、または使用することができBitbucketまたはKilnのようなMercurialホスティングサービスのこの方法で開発者は、変更をプル/プッシュするための中心的な権限を持ち、バックアップを作成することができます。

今、あなたは、2つの異なる方法で作業するこれらのリポジトリのクローンを作ることができます。

  • 直接プロジェクトをクローンします。たとえば:

    hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB 
    
  • および/またはを以下の内容でProjectAのルートに.hgsubファイルを置くことによってsubrepository定義を作成します。

    libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB 
    libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC 
    

これらsubrepository定義はMercurialのを伝えることプロジェクトAがクローンされるときはいつでも、ライブラリBとライブラリCのクローンをlibrariesフォルダに入れなければなりません。

プロジェクトAで作業してコミットしている場合は、libraries/LibraryBlibraries/LibraryCの変更もコミットされます。 Mercurialは、.hgsubstateファイルのProject Aで使用されているライブラリのバージョンを記録します。その結果、先週の出来事を確認するプロジェクトの旧バージョンへのhg updateには、対応するライブラリのバージョンも表示されます。タグをつける必要はありません:-)

hg pushプロジェクトAが祝福されたリポジトリに変更された場合、Mercurialはサブリポジトリの変更を最初に自分の起源にプッシュするようにします。そうすれば、未発表のライブラリの変更に依存するプロジェクトの変更を誤って公開することはありません。

すべてをローカルに保つ場合は、サブリポジトリ定義のURLの代わりに相対パスを使用しても、このワークフローを使用できます。

+0

ここでは、「これらのサブリポジトリ定義では、projectAがクローンされるたびに、LibraryBとLibraryCのクローンをlibrariesフォルダに配置する必要があります。 – LachlanG

+0

それだけのフォルダ、:libraries/libraryB = http://bitbucket.org/LachlanG/LibraryBの左側の部分は、右側のクローンが –

+0

@ LachlanGになる場所です:ProjectAのルートに表示されます例えば、 'C:\ Dev \ ProjectA \ libraries \'のようなクローンです。 –

2

あなたが実際にプロジェクトABC subreposを宣言することができます(Mercurial Subrepositoryで説明したように、彼らは、サブディレクトリとして表示されます)。 (下Aをして)

  • 1つの場所ですべてのリポジトリを取得
  • 参照A
  • タグそれぞれの下で正確なBのタグとCを:それはあなたができるようになると、あなたのリリース機構を改善する
    サブレポが最初にあれば
  • タグABCタグの情報が含まれています(Aのクローンはすべてexaを取得できます) BAで使用CのCTタグ)

はまた、独立しAの、DのsubrepoとしてBを宣言することができます。 ABについて)で作成した内容は、Dで使用されているBには影響しません。

関連する問題