12

Mercurial1.6を使用しています。いくつかのサブリポジトリ(11)を持つリポジトリがあります。子リポジトリをプッシュせずに、親リポジトリをデフォルトのリモートリポジトリにプッシュしたいと思います。これを実行したい理由は次のとおりです。

  • SSHリポジトリを使用していますが、接続を確立して各サブリポジトリに何もプッシュしないのに長い時間がかかります。
  • (まだ)リモートリポジトリに伝播したくないサブリポジトリにコミットがあります。
  • サブリポジトリには、レポリポジトリに伝播されるべきではない名前のブランチがあります(そして、サブリポジトリのプッシュ操作にブランチ名を渡す方法は明らかにありません)。

しかし、私はこれを達成する方法を見つけることができませんでした。.hgsubと.hgsubstateのコンテンツを(コミットせずに)削除しようとしましたが、それでもMercurialはサブリポジトリをプッシュすることを主張しています。

ローカルリポジトリからリモートリポジトリに変更をプッシュし、サブリポジトリを一時的に無視するにはどうすればよいですか?

4

1 に答える 1

4

サブレポのローカルクローンを作成する必要があると思います。

サブリポジトリをプッシュせずにメイン リポジトリをプッシュする場合の問題は、サブリポジトリの内容がメイン リポジトリの一部ではなく、その状態のみが含まれることです。コンテンツは、 で指定された元の場所から参照され.hgsubます。したがって、メイン リポジトリに.hgsubstateは「サブリポジトリ A はリビジョン abcd1234 です」と表示されますが、abcd1234 はプッシュしたくない変更であり、メイン リポジトリのクローンを作成するとどうなるでしょうか。元の場所からサブレポを複製して abcd1234 に更新しようとしますが、そのリビジョンは元の場所に存在しないため、複製は失敗します。

代わりに、各外部リポジトリのローカル クローンを作成し、それらをサブリポジトリの外部の場所として参照できます。その後、メイン リポジトリをプッシュすると、サブリポジトリの変更はローカル クローンにのみ反映されます。これらの変更を共有する準備ができたら、ローカル クローンに移動してそこからプッシュするだけで、ブランチ名などを渡すことができます。

于 2010-12-21T18:54:43.827 に答える