1

兄弟パスを使用してサブリポジトリを作成することは可能ですか?

ここでは Subversion が「選択された」VCS ですが、古いコミットに関するかなりの問題がすでに発生しています。ファイルを Hg と SVN でデュアル バージョン化する方がはるかに便利で、大きな成功を収めています。しかし、Hg を使用している同僚が何人かいますが、おそらく彼らが気づいていない 1 つを除いて、問題はありませんでした。

SVN レイアウトは次のようになります

Area/
    trunk/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

    branches/
        Program/
        Program/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

    tags/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

プロジェクトに取り組んでいるとき、これはちょっとばかげています。なぜなら、メイン プロジェクトがProgram1Program2、およびさらにいくつかのサービスで構成されている場合...すべての変更セットを一度に取得できないためです。ディレクトリに一致するリポジトリを取得しました。そのため、4 つまたは 5 つのリポジトリが同期していることを確認する必要があります。特に、いくつかのサービス参照が必要です。

単一のディレクトリの下でサブレポを使用して、いくつかの幸運がありました。

MainRepo/
    Subrepo1/
    Subrepo2/

しかし、私がやりたいのは、相対パスを指定して、サブリポジトリへの兄弟ディレクトリを使用できるようにすることです。したがって、次のようなものにすることができます。

Area/
    Project1/
        Program1/ (points to ../trunk/Program1)
        Program2/ (points to ../trunk/Program2)
        Service1/ (... You get the idea)
        Service2/

    trunk/
        Program1/
        Program2/
        Services/
            Service1/
            Service2/

しかし、これまでのところ、期待どおりに機能していません。trunk/Program1は Hg リポジトリであり、私のProject1/.hgsubファイルには次のものが含まれています

Program1 = ../trunk/Program1

私も試してみました../../trunk/Program1

しかし、これらのいずれかの結果として、新しいディレクトリが作成されArea/Program1/Project1ます。これは空です。

これまでのところ、サブリポジトリの使用httpベースのリポジトリを見つけることができた唯一の検索結果なので、ここからどこに行くべきかわかりません。私たちの開発環境はWindows 7なので、「簡単な」答えはジャンクションを作成することですが、私の主な関心事は、このようなことを簡単mklink /J Program1 ..\trunk\Program1にすることです.管理者のコマンド ウィンドウは、人々がより良いワークフローに移行するのを妨げるもう 1 つの問題です。

私が望むようにサブリポジトリを追加することは可能ですか、それとも私たちがしていることを行うためのより良い方法はありますか?

4

1 に答える 1

2

サブリポジトリは常に別のリポジトリ内にあります。つまり、サブリポジトリを使用すると、一部のリポジトリが他のリポジトリ内にネストされているリポジトリのコレクションをバージョン管理できます。したがって、外部リポジトリを作成しない限り、サブリポジトリを兄弟にすることはできません。

あなたが話している相対パスは、Mercurial が新しいサブリポジトリをどこから取得するかを把握する必要があるときに使用されます。つまり、実行hg updateしたとき (または の一部として実行されたときhg clone)、Mercurial が.hgsubファイルを認識すると、そこに記載されているサブリポジトリを作成する必要があります。サブレポを作成するために、Mercurial は右側のパスを使用します。

sub-A = relative/path
sub-B = C:/absolute/path

コマンドsub-Aを使用して、作業コピーのルートにチェックアウトされます

hg clone <default path for main repo>/relative/path sub-A

コマンドを使用しsub-Bてチェックアウトされます

hg clone C:/absolute/path sub-B

それだけです。非常に単純なメカニズムです。これについてはサブリポジトリ ガイドで説明しようとしましたが、wikiでも説明されています。

あなたの場合、一緒に属するパーツのシンシェルリポジトリを作成できます。このレポはProject1上記のようになり、サブレポとして 、 、 などがありProgram1ますProgram2Service1は次の.hgsubようになります。

Program1 = Program1
Program2 = Program2
Service1 = Service1
Service2 = Service2

「単純なサブレポ パス」を使用すると、作業が簡単になります。クローンはクローン ソースと同じように見え、すべてがまとめられます。

最後の注意:Program1またはService1を他のプロジェクトで使用しない限り、すべてを単一のリポジトリに配置する必要があります。

于 2012-06-19T17:57:04.973 に答える