7

Subversion を使用するプロジェクトに貢献しようとしています。Mercurial とその hgsubversion 拡張機能を使用してレポを複製しました。私の作業は機能ブランチで行われます。

デフォルトのブランチ (hg speak) 別名トランク (svn speak) で発生するもので機能ブランチを最新の状態に保つにはどうすればよいですか?

そのため、以前hg up featureは機能ブランチに更新していたhg pullので、デフォルト ブランチに変更セットがありました。だから私はhg merge defaultマージをhg pushコミットし、変更セットをSubversionに送信しようとしました。Mercurial は次のように述べています。「申し訳ありません。マージ リビジョンの svn 親が見つかりません。」

4

3 に答える 3

5

質問で説明されているようなイベントの後にリポジトリのウェッジを解除する方法をようやく見つけたので、親リポジトリを再クローンすることなく作業を続けることができます (明らかに、非常に遅い操作です) Subversion からプルしています!)。Subversion の「ヒント」があなたを追い越して、それ以上プッシュできない場合は、次のような $HOME/.hgrc 行を介して Mercurial で組み込みの「リベース」拡張機能が有効になっていることを確認してください。

[extensions]
rebase =

そして、リポジトリがくさびになったときに、次のコマンドを実行できるはずです。

$ hg rebase --svn

私がこれを正しく理解していれば、Subversion HEAD から離れた現在のブランチを解消し、Subversion の HEAD に対応する Mercurial のブランチ「ヒント」の上に再構築します。そこから、作業を続けて、再びプッシュを正常に行うことができます。これまでのところ、常にうまくいきました。問題が発生した場合はお知らせください。

于 2010-09-09T15:25:17.157 に答える
1

いくつかの異なる分岐モードとしての Mercurial: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

あなたが説明しているのは「名前付きブランチ」です。これは、mercurial (または hg-git) 経由でのみアクセスされるリポジトリで作業しているときに最も人気があります。

ただし、hg-subversion を使用して、名目上はブランチしか持たない subversion との間で変更をプッシュする場合は、mercurial のすべての変更を「デフォルト」の名前付きブランチに保持し、 「クローンと枝」パターン (とにかく私が好む)。

具体的には、そのメッセージSorry, can't find svn parent of a merge revision.は、Subversion に直接一致するリビジョンの子孫ではありません。

私があなただったら、svn から再クローンし、「transplant」コマンド (パッケージ化された拡張機能) を使用して、自分の作業をそのレポの「デフォルト」ブランチに移動します。hg-subversion を使用して複数の機能を並行して使用する場合は、subversion がブランチについて考える方法とより一致しているため、個別のクローンを使用します (それらは非常に安価です)。

于 2010-04-16T13:48:10.657 に答える
0

私はこれを自分で理解する必要があり、ここに書き留めました:

http://notebook.3gfp.com/2010/05/pushing-a-new-feature-from-a-mercurial-repo-into-an-svn-repo/

Subversionでブランチを閉じて、Mercurialグラフを正しく表示する方法をまだ理解していません。

于 2010-05-07T16:12:14.117 に答える