2012-01-14 8 views
0

キルンを使用してthis questionへの回答の指示に従おうとしています。私は、次のようなものを手配できるようにしたいと思いosxにmercurial/kiln subreposを設定します

:窯リポジトリ「サードパーティ」へ

  • /somepath/thirdparty地図や各種のコードが含まれてい
  • /somepath/commonマップ窯リポジトリに「共通」と含まれてい私は

    を書かれている共有コード窯リポジトリ "Project1の"

"Project1の" 窯リポジトリへ
  • /somepath/project2マップ上の共通のブランチへ
  • /somepath/project1/commonマップ上のサードパーティ製のブランチへ
  • /somepath/project1/thirdpartyマップへの/somepath/project1マップ
  • /somepath/project2/thirdpartyは、上記第三者の別の支店にマップします

上記共通の別のブランチへの

  • /somepath/project2/commonマップ私は指示通り.hgsubファイルを作成し、窯にそれをプッシュ/追加したとき、私はもはや窯Webファイルビューアで窯のファイルを表示することができなかったことがわかりました - それはKilnの "過熱"に関するあいまいなメッセージを表示しました:-)さらに、正しい場所にサブフォルダを自動的に作成していましたが、(プルに失敗した可能性があるため)ファイルが格納されませんでした。

    誰もがこの前にキルンを使ってみましたか?

    一般的なコードを使用して多数のアプリケーションを開発する予定です(そして最終的にオープンソースとしてライブラリをリリースする予定です)ので、個別のリポジトリで管理したいと考えています。しかし、エンド・クライアント向けのプロジェクトもありますので、上記のようなものを含む単一のリポジトリを提供する必要があります。

  • +0

    @Martin Geisler - 編集していただきありがとうございます。 – unsynchronized

    +0

    問題はありません、私はちょっときちんと整えてよかった! :) –

    答えて

    2

    キルはcurrently not support subrepos that use nested URLs on the serverです。これは、あなたが働いて両方の次のURLを持つことができないことを意味します

    http://server/kiln/somepath/project1 
    http://server/kiln/somepath/project1/thirdparty 
    

    だからべきセットアップ窯ので、サーバー上リポジトリを持っていること:

    http://server/kiln/somepath/project1 
    http://server/kiln/somepath/project2 
    http://server/kiln/somepath/thirdparty 
    http://server/kiln/somepath/common 
    

    簡単です - ちょうど4通常のリポジトリ。その後、クローン「プロジェクト」として.hgsubファイルを作成します。あなたは窯にその背中を押すと

    thirdparty = http://server/kiln/somepath/thirdparty 
    common = http://server/kiln/somepath/common 
    

    を、それがsubrepositoriesのリンクに気づくと表示されます。ただし、サブレポジトリは、がサーバーにネストされています。したがって、サーバー上には何もproject1/thirdpartyパスがありません。

    あなたがそれを望むことははっきりしていません。コラボレーションしていくつかの共通コードベースを使用するいくつかのプロジェクトがある場合、 "project1"と "project2"がこの共通コードベースの互いの変更を取得するようにします。したがって、両方のプロジェクトのサブプロジェクトcommonhttp://server/kiln/somepath/commonからプッシュアンドプルすることは非常に便利です。

    Mercurialでは、normally recommendのファイルで、.hgsubファイルにcommon = commonという形式のパスを使用しています。つまり、サーバーはネストされたリポジトリをサポートする必要があります。 Kilnがネストされたreposをサポートしていない場合は、代わりにフルパスを使用できます。

    サブリポジトリを最初に設定したときは、それらを手動で更新する必要があることに注意してください。したがって、上記のURLでは、次のコマンドを実行することによって "project1"をセットアップします。

    $ hg clone http://server/kiln/somepath/project1 
    $ echo "common =  http://server/kiln/somepath/common" > .hgsub 
    $ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub 
    $ hg commit -m "Created subrepos" 
    

    これにより、最初の空のサブレポジトリが作成されます。 Mercurialにあなたが必要とする変更を伝えていないので、それらは空です。これは、あなたが見つける.hgsubstateで追跡されています

    0000000000000000000000000000000000000000 common 
    0000000000000000000000000000000000000000 thirdparty 
    

    あなたはこれが2 subreposのための現在の先端チェンジIDに.hgsubstate000...行を更新

    $ cd common 
    $ hg pull --update 
    $ cd ../thirdparty 
    $ hg pull --update 
    $ cd .. 
    $ hg commit -m "Updated subrepos" 
    

    を行うsubrepositoriesを移入するには。 "project1"の将来のクローンは.hgsubstateファイルに気づき、ここに記載されているリビジョンにサブレポジトリを更新してください。

    +0

    hmmm、それは私がそれを設定していたように見えますが、失敗していました(私はサーバー上に入れ子にされていませんでしたが、ローカルのみ)。私はあなたの答えと私のアプローチがどのように異なっているのか、またそのエラーを引き起こしている可能性があるかを詳しく見ていきます。ありがとう。 – unsynchronized

    +0

    までは、http://の代わりにhttps://(my [auth]セクションのホームフォルダ内の.hgrcファイルにはキルンログイン用の適切なログイン情報があります)を除いて、 。私の実際のパスはここに投稿したくない意味のある名前を持っていますが、それ以外は意味的に同じです。 – unsynchronized

    +0

    さて、奇妙な。プロジェクトをクローンすると、Mercurialはサブレポを単にクローンします。ですから、 'server/kiln/common'を手作業でクローニングしてみてください。それがうまくいかない場合は、Kilnのレポに問題があります。私はあなたがこれを知っていると思いますが、サブポペは特別ではありません - それはサーバー上の通常のレポです。他のreposは '.hgsub'ファイルでそれを参照することができますが、subrepoはこれを"認識 "しません。 –

    関連する問題