2

少し前に、SVN リポジトリを Mercurial リポジトリに変換しました。適切に変換されたようで、すでにプロジェクトに多くの変更をコミットしています。しばらくして(履歴を掘り下げたときに)、変換が適切に行われていないことに気付きました-つまり、古いコミットは時間順にソートされていなかったため、SVNリポジトリからのすべてのリビジョンを持っていますが、適切な順序ではありません(そして変換後にコミットを行ったこと)。

これを修正したいと思います。これを修正する唯一の方法は、リポジトリを 2 つに分割することです

  • 古い SVN リポジトリから変換されたリビジョンを含むもの ( と呼びましょうA1)
  • そして、新しいコミットのみを含むもの (それを と呼びましょうB1)

SVN リポジトリをもう一度 (今回は適切に) 変換し、リポジトリが最初に変換されてから行ったすべての変更を再適用したいと思います (B1一部)。

すべてを要約すると、私がしなければならないこと (または、私がしなければならないと思うこと) は次のとおりです。

  1. 既存のレポを 2 つに分割します。1 つは SVN リポジトリから変換して作成されたもの ( A1) で、もう 1 つは適切なコミットを含むものです (リポジトリの変換後に私が作成したものです - B1)。

  2. SVN リポジトリを Mercurial (または、何らかの理由で Mercurial で他のすべての手順を実行できない場合は Git) に変換します。したがって、変換後はA2.

  3. B1ポイント2からの変更を新しく変換されたリポジトリに適用します-A2

適切に順序付けされたコミット ( ) を取得するための変換 (ポイント 2) の方法を知っていると思いますA2A11. (既存のリポジトリを&に分割) & 3 ( からへB1のコミットを適用)の助けが必要です。B1A2

それはMercurialで実行できますか?Mercurial で実行できない場合 - Git を使用して達成することは可能ですか (私が知る限り、SVN と Mercurial リポジトリを Git リポジトリに簡単に変換できます)。

4

3 に答える 3

2

このconvert拡張機能は、既存のリポジトリのサブセットに基づいて新しいリポジトリを作成する場合にも役立ちます。

于 2012-09-01T17:07:08.800 に答える
2

新しい変更セットはかなり直線的だと思います。そうであれば、MQ を使用して簡単に行うことができます。すべての新しい変更セットを MQ 変更セット ( qimport) に変換し、変換したばかりのリポジトリにその束を適用するだけです。

于 2012-09-01T15:22:39.233 に答える
1

stripコマンド ( mq extensionの一部) を使用して、すべての新しい変更セットを取り除くことができるはずです。これにより、すべての新しい変更セットのバンドルが作成されます (コマンドは bundle コマンドの場所を出力します)。このバンドルを取得し、(unbundleコマンドを使用して) バンドルを解除して、代替A2リポジトリに入れることができるはずです。

于 2012-09-01T16:11:28.367 に答える