17

github でホストされているプロジェクトの依存関係を持つ bitbucket を使用してプロジェクトをセットアップしようとしています。Hg-Git Mercurial プラグインを使用すると、ほとんどそこに到達できます。

でも、いざという時は面倒くさい。

Mercurial サブリポジトリのドキュメントには次のように記載されています。

2.4 押す

Mercurial は、プッシュ時に現在のリポジトリのすべてのサブリポジトリを最初にプッシュしようと自動的に試みます。これにより、トップレベルのリポジトリから参照されたときに、サブリポジトリ内の新しい変更セットが確実に利用できるようになります。

しかし、これは大きな問題を引き起こします。すべてのサブリポジトリをプッシュしたくないからです (なぜプッシュしたいのでしょうか?) — 私はそれらへの読み取りアクセス権しか持っていないので、github はそれを許可しません。メイン リポジトリのみをリモート サーバーにプッシュする必要がありますが、その方法がわかりません。hg変更があるかどうかに関係なく、すべてのサブリポジトリを制御してプッシュしたいと考えています。この機能をバイパスする方法はありますか?

プッシュする必要があるのは.hgsubとだけ.hgsubstateです。それらが代替ルート経由でプッシュされると (サブリポジトリが存在しないチェンジセットに更新されます)、リモート リポジトリから変更を更新してプルすることができますが、サブリポジトリでは、試練全体が繰り返されます。

4

4 に答える 4

12

今後の参考のために、mercurial の開発ブランチ (および今後の 1.8 リリース) は、ネイティブ git サブリポジトリをサポートするようになりました。この特定のケースは非常にうまく実装されており、ルート リポジトリからのプッシュは、リモート リポジトリに現在のコミットがあることがわかっていない場合にのみ、git サブリポジトリにプッシュするように指示します。

于 2010-11-30T16:11:38.307 に答える
4

Mercurial のプッシュ方法により、これは不可能です。これは設計上のエラーです。

最善の解決策は、サブリポジトリが存在しない以前のリビジョンに更新してからプッシュすることです。これにより、Mercurial の制限が回避され、必要なファイルがアップロードされ.hgsubます.hgsubstate。これは少し不便ですが、Mercurial と Git を相互に連携させるためにこれまでに見つけた最良の方法です。

おそらく将来、Hg-Git が更新され、このユース ケースを自動的に処理するようになるでしょう。

于 2010-10-31T17:51:27.533 に答える
2

複数のリポジトリを使用する必要があると思います。DVCS はそのようにうまく機能します。

たとえば、github からの依存関係を含む 1 つのリポジトリを作成します。変更を取得するためにそのレポをプルするだけで、プッシュすることはありません。次に、開発用のプロジェクト用の別のリポジトリがあります。ここでは、何をしても自由です。そして、依存関係のために独自の hg リポジトリにリンクします。

それは、私があなたの問題とあなたがやろうとしていることを正しく理解した場合です:)

于 2010-10-30T20:28:02.667 に答える
0

サブリポジトリに発信変更セットがない場合、「プッシュ」は実際には、リモート リポジトリから最新の変更セット リストを取得する以外には何もしません。したがって、プッシュの実際の「プッシュ」部分は発生しません。読み取り専用の BitBucket リポジトリをサブモジュールとして使用することに成功しました。

于 2010-10-30T13:35:02.100 に答える