4

コードの変更に取り組んでいるときに、それ自体がサブリポジトリであるリポジトリ内の共有ライブラリ コードに対応する変更を加える必要がある場合があります。変更をコミットしたいときは、親リポジトリで行い、Mercurial はサブリポジトリで対応するコミットを行います。

しかし、私は最近、MQ を使用して自分自身の変更履歴をより適切に追跡し、実験の自由度を高め、大規模なリファクタリング作業をより安全に行えるようにしました。親リポジトリとサブリポジトリの両方で MQ を有効にしています。

上記のシナリオで、新規または既存の MQ パッチに「コミット」すると、サブレポが無視されると想定するのは正しいですか? これは私のテストで起こっているようです。これは、サブレポでパッチ キューを手動で管理する必要があるということですか? これはすぐに扱いにくくなります。

これがうまくいかない場合は、それで問題ありません。ワークフローを調整して、クロスレポ作業を行うときに MQ を回避できます。


更新:このスレッドによると、現時点では「サポートされていない」可能性があるようです: https://www.mercurial-scm.org/bts/issue2499

私は次のことを試しました:

  1. サブレポの変更を手動でコミットしました。
  2. サブリポジトリ コミットからのハッシュを使用して、親リポジトリの .hgsubstate ファイルを手動で更新しました。
  3. 親リポジトリを qrefresh しようとしました。

アイデアは、手動で行う必要がある場合でも、親リポジトリからコミットを取得して、常に正しいサブレポ バージョンと同期できるようにすることでした。残念ながら、Mercurial はここで私を保護したいと考えているようで (そうあるべきです!)、qrefresh しようとすると次のように表示されます。

warning: not refreshing .hgsubstate

物事を「修正」するために、親リポジトリで hgfinish の後に空のコミットを行い、物事を同期させます。しかし...それはばかげているようで、コードの歴史を理解するのが難しくなります。

まあ、私は石器時代に戻って、サブリポジトリが関係するワークフローで MQ を使用するのをやめるだろうと思います。

4

0 に答える 0