6

重複の可能性:
Subversion リポジトリから最後の n リビジョンを git-svn で複製する方法は?

大規模な WordPress プラグイン リポジトリでホストされている WordPress プラグインを Git に移動しようとしています。

使いgit-svnづらく、時間がかかりすぎて (1 つのプラグインで 4 ~ 5 時間以上)、移行するプラグインが 20 個近くあります。

自分のマシンにチェックアウトした SVN リポジトリがあります。.svnSVN サーバーに接続せずに、フォルダーに保存されている履歴情報を使用するだけで、SVN リポジトリーを Git にインポートする方法はありますか?

4

3 に答える 3

8

マシンにSVNリポジトリがありません。作業コピーがあります。

Gitとは異なり、SVNは、作業コピーをチェックアウトするときに、履歴全体を含むリポジトリ全体をダウンロードしません。最新バージョンのファイルをダウンロードするだけです。

したがって、作業コピーからSVNプロジェクトの履歴を取得することは不可能です。

于 2012-12-29T16:43:04.017 に答える
3

TL;DR

いいえ。ただし、いくつかの代替手段があります。

Git と SVN の歴史

Git と SVN の履歴の処理方法はまったく異なります。SVN リポジトリをチェックアウトすると、.svn ディレクトリには最新のコミットのみが保持されるため、作業ディレクトリと比較したり元に戻したりできます。

一方、Git は履歴全体を複製します。浅いクローンなどの特定の例外がありますが、ほとんどの目的で、Git は履歴の表示や差分の計算などを行うために完全なリポジトリを必要とします。

切り捨てられた履歴が気にならない場合は、--depthまたはの--revisionフラグを参照してくださいgit-svn。これらのフラグを使用すると、SVN リポジトリから取得するリビジョンの数、取引履歴、速度を向上させる機能を制限できます。

ただし、SVN 作業コピーを新しい Git リポジトリとしてインポートすることはできますが、.svn ディレクトリには実際の履歴は保持されません。履歴にアクセスするには SVN リポジトリに接続する必要があるため、作業コピーからインポートすることはできません。

Subversion を最初にミラーリングする

git-svnただし、Subversion リポジトリをミラーリングしてから、ミラーに対してローカルで実行することを検討してください。SVN リポジトリの完全なコピーが必要ですが、リポジトリのミラーリングは、Subversion のコミットをネットワーク接続経由​​で一度に 1 つずつ取得するよりも時間がかかりませんgit-svn

やりたいことはまだできないことに注意してください。ただし、これは SVN から Git への移行の速度を向上させる別の実行可能な代替手段です。これにより、速度が向上するだけでなく、Git 側の履歴がより完全になります。

于 2012-12-29T16:55:21.293 に答える
1
  1. .svnWorking Copyのdirには、リポジトリの完全な履歴は含まれていません。WC内のデータの「元のコピー」(およびいくつかの追加のメタデータ)のみが含まれています。リポジトリを操作しないと、完全な履歴を取得することはできません。
  2. 仕上げプロセスをより速くしたい場合は、ローカルディスクスペースのコストでそれを試すことができます

推奨されるワークフローは次のようになります。

  • プラグイン(1つのプラグイン-1つのリポジトリ)で区切られたローカル(file:///到達)SVNリポジトリを取得します。このようにして、(変換段階で)ソースデータへの最速のアクセスと、リポジトリの無関係な(処理されたプラグインの)部分からのコミットのフィルタリングの不必要性を得ることができます。洗浄されたダンプを準備するためsvnadmin dump| svndumpfilterの使用。svnrdump | svndumpfilterおそらく、1つの完全なsvnrdumpとそれを後でフィルタリングすることcat DUMP| svndumpfilter includeで、さらに時間効率が良くなります。
  • 前の手順で準備したGitの小さなリポジトリにインポートします。
于 2012-12-29T17:00:34.490 に答える