158

「プロジェクト」という名前の Subversion リポジトリに「docs」フォルダがあります。「project_docs」という名前の別の Subversion リポジトリに保存する必要があるという結論に達しました。

「docs」フォルダー (およびそのすべてのリビジョン) を「project_docs」リポジトリーに移動したいと考えています。これを行う方法はありますか?

4

7 に答える 7

184

リポジトリ自体 (作業コピーではない) にアクセスできる場合は、現在のリポジトリをダンプし、それをフィルタリングして docs フォルダーに関する情報のみを含め、他のリポジトリにロードできるはずです。

次のようになります。

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump

リポジトリにアクセスできないと、リビジョン履歴を維持できず、ファイルを新しいリポジトリにコピーしてコミットする必要があります。

于 2009-01-06T19:14:49.050 に答える
30

svndumpfilter には重大な欠陥があります。ファイルまたはパスが、フィルターで除外しているパスからフィルターで除外しているパスにコピーされた場合、svndumpfilter は履歴を埋めることができず、ジョブは失敗します。

この問題が発生した場合は、 svndumpfilter2を使用できます。

于 2009-04-02T09:00:58.310 に答える
6

これについては、SVN のドキュメントで説明されています。... のリポジトリ メンテナンスセクションを確認してくださいsvndumpfilter。具体的には、中央リポジトリからプロジェクトをダンプし、それらを新しい別のリポジトリに移動する方法について説明しています。

于 2009-01-06T19:10:58.917 に答える
2

リモートで (つまり、ローカル コピーなしで) 実行できるとは思えません。ただし、これは機能するはずです。svn export元のサーバーのフォルダーから、svn add新しいリポジトリに移動します。

お気に入り:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

編集:ああ、これは履歴を削除します。サミュエルが説明するように使用svnadminしてください。

于 2009-01-06T19:09:40.433 に答える
2

今後の参考のために:

SVNのドキュメントは明確に報告しています:

ダンプ ファイルを手動で編集して最上位のディレクトリを削除する予定がある場合は、エディタが行末文字をネイティブ形式に自動的に変換するように設定されていないことを確認してください (例: \r\n を \n に)。コンテンツがメタデータと一致しないためです。これにより、ダンプ ファイルが役に立たなくなります。

sed または Vim を使用して最上位ディレクトリを置き換えますが、このディレクトリ名はプロジェクト ファイル内にも含まれていました!!!! これにより、SVN ロード チェックサム エラーが発生します。

したがって、この操作を実行するときは、パス名のみの sed で文字列置換を行わないでください。

「Node-path: old_path」を「Node-path: new_path」に置き換えます。詳細については、SVN ブックの第 5 章「リポジトリ管理」を参照してください。

于 2011-10-05T09:18:51.320 に答える