18

私のプロジェクトは、次の場所にあるコードで構成されています

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

現在、これらの各フォルダは完全に独立した Mercurial リポジトリです。プロジェクト A は常に変更され、ライブラリ B とライブラリ C はめったに変更されません。

私は現在、プロジェクト A の各バージョンがリリースされるたびにタグを付けており、(思い出すと) ライブラリ B および C リポジトリに対応するタグを付けています。

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

ライブラリ B と C がプロジェクト A のサブディレクトリでなければならない場合、ライブラリ B を使用するがプロジェクト A とはまったく関係のないプロジェクト D を開始したい場合はどうすればよいですか?

4

2 に答える 2

18

ライブラリ B と C がプロジェクト A のサブディレクトリでなければならない場合、ライブラリ B を使用するがプロジェクト A とはまったく関係のないプロジェクト D を開始したい場合はどうすればよいですか?

どのプロジェクトも、独立し存在することも、別のプロジェクトのサブリポジトリとして同時に存在することもできます。ワークフローを提案しながら説明します。

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

祝福されたリポジトリ

自分のサーバーでhgwebdirを実行するか、 BitbucketKilnなどの Mercurial ホスティング サービスを利用できます。このようにして、開発者は変更をプル/プッシュするための中央の信頼できるポイントを持ち、バックアップを作成するものがあります。

これらのリポジトリのクローンを作成して、2 つの異なる方法で作業できるようになりました。

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

    hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
    
  • のルートに次の内容のファイルを配置して、サブリポジトリの定義を作成します。.hgsubProjectA

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

これらのサブリポジトリの定義は、プロジェクト A が複製されるたびに、ライブラリ B とライブラリ C の複製もフォルダに配置する必要があることを Mercurial に伝えlibrariesます。

プロジェクト A で作業していてコミットすると、libraries/LibraryBとの変更libraries/LibraryCもコミットされます。Mercurial は、プロジェクト A で使用されているライブラリのバージョンを.hgsubstateファイルに記録します。その結果hg update、先週の動作を確認するために古いバージョンのプロジェクトにアクセスすると、対応するバージョンのライブラリも取得されます。タグを作る必要さえありません:-)

プロジェクト Aがhg push祝福されたリポジトリに変更を加えると、Mercurial はサブリポジトリの変更を最初に独自のオリジンに確実にプッシュします。こうすることで、未公開のライブラリの変更に依存するプロジェクトの変更を誤って公開することがなくなります。

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

于 2010-12-16T10:42:50.133 に答える
2

実際、プロジェクトのサブリポジトリを宣言Bしてサブリポジトリにすることができます ( Mercurial Subrepositoryで説明されているように、サブディレクトリとして表示されます)。 これにより、次のことが可能になるため、リリースメカニズムが改善されます。CA

  • すべてのリポジトリを 1 か所 (Aおよびその下)に取得する
  • 以下の正確なタグを参照BするCA
  • 変更があった場合は、最初に各サブリポジトリにタグを付けます
  • およびタグAに関する情報を含む タグ ( のクローンはの正確なタグを取得し、によって使用されます)BCABCA

とは別にB、 のサブレポとして宣言することもできます。あなたが(に関して) で作ったものは、 で使用されたものには何の影響もありません。DAABBD

于 2010-12-16T07:01:58.437 に答える