4

サブリポジトリを含む多数のプロジェクトがあります。

/project              <- Main repository
/project/src          <- Source code subrepository  (subrepository to /project)
/project/src/module   <- Module subrepository (subrepository to /project/src repository)

私は今、いくつかのリビジョンを持つフィーチャー ブランチ ( feature1 ) に取り組んできました。これをデフォルト ブランチにマージしたいと思います。feature1ブランチが作成されて以来、default ブランチには変更がありません。

ブランチをデフォルトにマージしようとしましたが、サブリポジトリで奇妙なことが起こってしまいます。

この他の投稿の指示に従いましたが、次の結果が得られました。

$ hg checkout default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge feature1
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
$ hg status -S
  M .hgsubstate
$ hg commit -S -m "branch merge test"
  nothing changed
$ hg branches
   default                       19:c2398dc23428
   feature1                      17:98dc0efbad90 (inactive)

奇妙なのは、モジュールのサブリポジトリで多くのファイルが変更されたにもかかわらず、マージでは 1 つのファイルが更新されたとしか示されていないことです。これはたまたま.hgsubstateであると想定しています。

サブリポジトリを明示的に更新すると、次のようになります。

$ cd src/module
$ hg update
  39 files updated, 0 files merged, 23 files removed, 0 files unresolved
$ cd ../..
$ hg commit -S -m "feature1 merge"
   committing subrepository src
$ hg status -S
   M .hgsubstate

したがって、すべての変更を作業ディレクトリに反映するためにhg updateを実行すると、コミットする必要があるモジュールサブリポジトリの変更が表示されます。ただし、.hgsubstateは常に変更された状態のままです。hg removeを試しました。hg forgetを試しました。しかし、私が何をしても、hg statusを実行するとマークされます。

だから私の質問は:

  1. ブランチをマージするために行ったプロセスは正しかったですか (サブリポジトリが存在することを考慮して)?
  2. メインリポジトリに変更を認識させるために、サブリポジトリでhg updateを実行する必要がありますか?
  3. .hgsubstate の動作がおかしいのはなぜですか?
4

1 に答える 1