Git SubrepositoryをMercurialに追加します
-
27-09-2019 - |
質問
GitHubでホストされているプロジェクトの依存関係を備えたBitbucketを使用してプロジェクトを設定しようとしています。 HG-Git Mercurialプラグインを使用して、ほとんどそこに着くことができます。
しかし、プッシュする時が来たら、物事は厄介になります。
のドキュメント 水銀サブレポジトリー 州:
2.4プッシュ
Mercurialは、プッシュ時に現在のリポジトリのすべてのサブレポスを最初にプッシュしようとします。これにより、トップレベルのリポジトリで参照されると、サブレポスの新しい変更セットが利用可能になります。
しかし、私はすべてのサブレポジトリーをプッシュしたくないので、これは大きな問題を引き起こします(なぜ私は?) - 私はそれらにアクセスするだけであるので、githubはそれを許可しません。メインリポジトリのみをリモートサーバーにプッシュする必要がありますが、その方法はわかりません。 hg
変更があるかどうかに関係なく、すべてのサブレポジトリーを制御し、プッシュしたいと考えています。これをバイパスする方法はありますか 特徴?
プッシュする必要がある唯一のことはです .hgsub
と .hgsubstate
. 。代替ルートを介してプッシュされたら(サブレポジトリーが存在しない変更セットに更新)、リモートリポジトリから変更を更新して引き出すことができますが、変更中に再びプッシュする場合は、サブレポジトリー、試練全体が繰り返されます。
解決 2
これは、Mercurialのプッシュ方法のために不可能です。これは 意図的に エラー。
最良の解決策は、サブレポジトリーが存在しない以前の改訂に更新してから、プッシュすることです。これにより、Mercurialの制限をバイパスし、必要なものをアップロードします .hgsub
と .hgsubstate
ファイル。これは少し不便ですが、私がこれまでにマーキュリアルとgitを互いに連携させるために見つけた最良の方法です。
おそらく、将来的には、このユースケースを自動的に処理するためにHG-GITが更新されるでしょう。
他のヒント
将来の参照のために、Mercurialの開発部門(したがって、今後の1.8リリース)は、ネイティブGitサブレポスをサポートするようになりました。この特定のケースは非常にうまく実装されており、ルートリポジトリからのプッシュは、Git Subrepoに、リモートリポジトリが現在のコミットを持っていることが知られていない場合にのみプッシュするように指示します。
複数のリポジトリを使用する必要があると思います。 DVCはそのようにうまく機能します。
たとえば、GitHubからの依存関係を含む1つのリポジトリを作成します。あなたはそのレポを引っ張って変更を得るだけで、決してプッシュしません。次に、プロジェクトのための別のリポジトリがあります。ここであなたはあなたがやりたいことを何でも自由にすることができます。そして、依存関係については、独自のHGリポジトリにリンクします。
それは私があなたの問題とあなたがやろうとしていることを正しく理解した場合です:)
Subrepositoryに発信チェンジセットがない場合、「プッシュ」は、リモートリポジトリから最新の変更リストを取得する以外に何もしないはずです。したがって、プッシュの実際の「プッシュ」部分は起こりません。読み取り専用のBitbucketリポジトリをサブモジュールとして使用しました。