8
  1. ルート Mercurial リポジトリ (Web サイト) があります。
  2. WordPress をGitHub ミラーから/wpサブディレクトリに複製します。
  3. 私はWPの非常に具体的な(安定した)バージョンが欲しいので、進行中の開発は行いませんgit checkout 3.4.1(どこ3.4.1にタグがありますか)。
  4. ルート Mercurial リポジトリでサブリポジトリとしてセットアップし、コミットします (WP リビジョンは でうまくキャプチャされます.hgsubstate)。

そして、ここでトラブルが始まります。私はそうしhg push、WPに到達したとき:

no branch checked out in subrepo wp
cannot push revision e9bc63e25dc40c07ac3a6778dc2b48e1aa486e36

そして、それはただ終了します。ルート リポジトリのプッシュも試行されません。

Mercurialがサブレポをプッシュしようとする理由(意図された動作) は理解していますが、サブレポで完全に失敗する理由がわかりません。

  1. 変更はありません
  2. とにかく読み取り専用のオリジンを持っています

この特定のリビジョンが必要で、Git サブレポを台無しにしたくないことを理解させるにはどうすればよいですか?

4

1 に答える 1

4

このセットアップでは、いくつかの問題が発生します。

まず、mercurial は切り離された HEAD で git subrepos を処理できないようです。

を実行するgit checkout 3.4.1と、レポはデタッチされた HEAD状態になります (コマンドを実行したときに、その影響に関する警告が表示されたはずです)。その時点で を実行すると、がアクティブなブランチとしてリストされているgit branchことがわかります。(no branch)Mercurial がプッシュしようとすると、この状態でチョークします。なぜこれが起こるのか、 mercurial 開発者リストに尋ねることができますが、おそらく既存のサブレポ実装の制限です。

次に、mercurial は push コマンドを使用して git subrepos を同期します。

を実行するgit checkout -b <integration_branch> 3.4.1と、git が切り離された HEAD 状態から抜け出します。ただし、 を実行しようとするhg pushと、実際にリモートの git リポジトリにプッシュしようとします。Mercurial サブレポの場合、リモートへのプッシュ アクセス権がない場合でも、発信変更をチェックできます。ただし、GitHub では、2 つのリポジトリが同期されているかどうかを確認する前に、認証を行う必要があります。そのため、git リモートへのプッシュ アクセスがない場合、これは失敗します。これは、mercurial のサブレポ戦略の設計の一部です。

このセットアップを続行する必要がある場合は、おそらく次の手順を実行する必要があります。

  1. GitHub で WordPress リポジトリの独自のフォークを作成します。
  2. fork を mercurial subrepo ディレクトリにクローンします。
  3. git checkout -b <branch_name> 3.4.1
  4. そこから続けて

この関連する質問には、いくつかの追加情報があります。

于 2012-07-13T15:02:25.970 に答える