16

SVN リポジトリで作業を開始しました。そのサブフォルダーをローカルの Hg リポジトリに複製しましたhg clone

その後、SVN リポジトリにアクセスできない同僚とこれを共有したいと思いました。プライベートな BitBucket リポジトリを作成しました。変更をプッシュすることもあったため、プルする必要がありました。

hgsubversionコミッターを変更するなど、変更セットに対していくつかの厄介なことを行います(ハッシュも信じています)。BitBucket リポジトリへのプッシュとプルを試みたとき、マージを行う必要がありました。

私たちの最愛の友人であるabort: Sorry, can't find svn parent of a merge revision..

hgsubversion互換性を維持しながら(つまり、マージ リビジョンをインポートせずに) 、BitBucket をターゲットとする Mercurial リポジトリを svn をターゲットとする Mercurial リポジトリでプルするにはどうすればよいでしょうか?

もちろん、これを行うための自動化された方法があれば幸いですが、そのような方法や簡単な方法がない場合は、解決策に感謝します。

私は使用しますが、使用hgsubversionしませんhgsvn。つまり、拡張機能hg clone svn://repo/urlです。ただし、必要に応じて切り替えることはできます。

4

3 に答える 3

21

SubversionリポジトリでMercurialを使用する場合でも、SVNと同じように考える必要があるため、基本的なMercurialワークフローの多くの機能が機能しません。Mercurialの方法をマージすることは、svnデポでは不可能です。プルされたsvnブランチと作業をマージした場合、今受け取っているメッセージについて悪名高いものが表示されます:(

この質問に対するdurin42の回答を読むことをお勧めします。

編集:現在の混乱から抜け出すために、SVNリポジトリからチェックアウトした時点からパッチ(または一連のパッチ)を作成することをお勧めします。Subversionリポジトリから新しい新しいコピーを取得し、パッチを適用します。現在のレポからそれを実行できるかどうかはわかりません。hgdiffコマンドを調べることができます。

hg diff -g -r tip -r XXX > patch

XXXが元のSVNチェックアウトです(まだテストしていません)。

于 2010-10-23T14:47:17.207 に答える
10

はい、hgsubversion は Subversion によって割り当てられた名前を反映する必要があるため、コミッター名を変更します。Hgsubversionは、変更セットのハッシュも変更する必要があります。これは実際には hgsubversion が決定できるものではありません。変更セットのハッシュが変更セット内のすべての情報に基づいており、コミッターの名前が含まれているというのは、Mercurial の設計に組み込まれています。

hgsubversionを正しく使用する方法については、私のhgsubversion ガイドをお読みください。覚えておくべき重要な点は、hgsubversion がhgより優れたに変わるsvnということですが、マスターであるのは依然として Subversion です。これは、履歴を Subversion に戻す前に履歴を線形化して、マージやその他のおかしな DVCS が発生しないようにする必要があることを意味します。

Mercurial の分散機能を利用したい場合は、小さな反復でそれを行います: Mercurial でいくつかのコラボレーションを行い、変更セットを線形化し、Subversion にプッシュバックし、クローンの非線形部分を破棄し、Subversion からプルします。その後、Mercurial でコラボレーションの新しい反復を繰り返すことができます。

于 2010-10-25T06:28:21.990 に答える
0

同様の問題に遭遇しましたが、基本的には次のとおりです。

  • HgSubversion を使用して SVN リポジトリを複製する
  • いくつかのマージでそれを解決する
  • 以前のSVNリポジトリに戻そうとしています

そして恐ろしいSorry, can't find svn parent of a merge revisionメッセージに出くわしました。

それは、あまり手間をかけずに修正するために私がしたことです:

  1. このリンクから TortoiseSVN をダウンロードしてインストールします。
  2. Windows エクスプローラーのコンテキスト メニューからコマンドを使用して、SVN リポジトリを新しいフォルダーにチェックアウトしSVN Checkout...ます (右クリックしてアクセスします)。
  3. ローカル HG フォルダーの内容 (サブフォルダーのみを除く.hg) を新しく作成した SVN フォルダーにコピーし、すべてのファイルを上書きします。
  4. そのフォルダを右クリックして実行しますSVN Commit...
  5. HG リポジトリを破棄し、更新された SVN リポジトリから引き戻します。

2 分ほどかかると、すべてが再び機能し始めます。いくつかのマージとコミットの情報が失われますが、SVN/HgSubversion コンボはそれらを追跡できないため、問題にはなりません。

于 2015-08-11T18:10:37.087 に答える