1

座薬について質問です。私たちのプロジェクトは次のように設定されています。

+ projectA
    + some files
    + dependencyA
        + some files

dependencyAサブリポジトリです。これは次のように作成されました。

  1. cdプロジェクトA
  2. mkdir 依存関係 A
  3. cd依存性A
  4. hg 初期化
  5. hg プル ssh://hg@somerandomiphere/dependencyA
  6. CD ..
  7. エコー依存性 A = ssh://hg@somerandomiphere/dependencyA > .hgsub
  8. hg 追加
  9. hg コミット
  10. hgプッシュ

suprepository に変更を加えた場合は、それらをコミットしてメイン プロジェクトからプッシュします。どちらも再帰的であるため、サーバーにプッシュされます。今、同僚がサーバーから変更を取得したいと考えています。しかし、メインプロジェクトでは何も変更されていないため、機能しません。しかし、メイン プロジェクトで何かを変更してサーバーにプッシュすると、hg pull彼が最新の変更セットを取得すると、hg updateサブリポジトリも更新されます。これは予期される動作です。

ここで私の質問は、変更をプルする方法があるかどうかですが、それの新しいクローンを作成せずにサブリポジトリに対してのみ、またはそれを行うための最良の方法は何でしょうか.

4

2 に答える 2

2

Mercurial wikiのサブリポジトリ、p。2.5「プル」

'pull'コマンドは、デフォルトでは再帰的ではありません。これは、特定のチェンジセットへの更新が要求されるまで、Mercurialが必要なサブリポジトリを認識しないためです。更新により、要求されたサブリポジトリとチェンジセットがオンデマンドでプルされます。プルと更新を1つのステップで取得するには、「pull--update」を使用します。

サブリポジトリが作業ディレクトリにあることを考えると、これはサブリポジトリなしでの「pull」の動作と正確に一致することに注意してください。

  • 'hg pull'はアップストリームのチェンジセットを提供しますが、作業ディレクトリには影響しません。
  • 'hg update'は、作業ディレクトリの内容を更新します(トップリポジトリとすべてのサブリポジトリの両方)

サブリポジトリがある場合は、常に--updateを使用してプルすることをお勧めします。これにより、通常、更新によって変更セットが失われることはなく、更新によってプルが発生することもありません。ブランチの交差が原因でpullwithupdateが失敗した場合は、「hgupdate」を使用してすべてのサブリポジトリの更新を取得する必要があります。

于 2011-11-07T13:49:52.740 に答える
0

上記で提案されたものは、私が思ったように機能します。本当の問題は、サブリポジトリを作成する方法でした。

それ以外の:

  1. cdプロジェクトA
  2. mkdir
  3. 依存関係A
  4. cd依存性A
  5. hg 初期化
  6. hg プル ssh://hg@somerandomiphere/dependencyA

それは単純だったはずです:

  1. hg clone ssh://hg@somerandomiphere/dependencyA 依存関係 A

私たちが知っている.hgsusbtateように、コミット後に特定のリビジョンでサブレポをロックします。こうなったのですが、(!) サブリポジトリでやっhg pullてみるとエラーで終わってしまいました

paths cannot contain dot file components

したがって、これは、コミット後に更新されたリビジョンでサブレポがロックされ、上記のエラーのためにリポジトリから変更をプルできなかったことを意味します。なぜこれが起こったのかは、この受け入れられた回答でかなりよく説明されています。

解決:

クローニングは進むべき道です

于 2011-11-08T16:34:24.083 に答える