「プロジェクト」という名前の Subversion リポジトリに「docs」フォルダがあります。「project_docs」という名前の別の Subversion リポジトリに保存する必要があるという結論に達しました。
「docs」フォルダー (およびそのすべてのリビジョン) を「project_docs」リポジトリーに移動したいと考えています。これを行う方法はありますか?
「プロジェクト」という名前の Subversion リポジトリに「docs」フォルダがあります。「project_docs」という名前の別の Subversion リポジトリに保存する必要があるという結論に達しました。
「docs」フォルダー (およびそのすべてのリビジョン) を「project_docs」リポジトリーに移動したいと考えています。これを行う方法はありますか?
リポジトリ自体 (作業コピーではない) にアクセスできる場合は、現在のリポジトリをダンプし、それをフィルタリングして 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
リポジトリにアクセスできないと、リビジョン履歴を維持できず、ファイルを新しいリポジトリにコピーしてコミットする必要があります。
svndumpfilter には重大な欠陥があります。ファイルまたはパスが、フィルターで除外しているパスからフィルターで除外しているパスにコピーされた場合、svndumpfilter は履歴を埋めることができず、ジョブは失敗します。
この問題が発生した場合は、 svndumpfilter2を使用できます。
これについては、SVN のドキュメントで説明されています。... のリポジトリ メンテナンスセクションを確認してくださいsvndumpfilter
。具体的には、中央リポジトリからプロジェクトをダンプし、それらを新しい別のリポジトリに移動する方法について説明しています。
リモートで (つまり、ローカル コピーなしで) 実行できるとは思えません。ただし、これは機能するはずです。svn export
元のサーバーのフォルダーから、svn add
新しいリポジトリに移動します。
お気に入り:
$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit
編集:ああ、これは履歴を削除します。サミュエルが説明するように使用svnadmin
してください。
今後の参考のために:
SVNのドキュメントは明確に報告しています:
ダンプ ファイルを手動で編集して最上位のディレクトリを削除する予定がある場合は、エディタが行末文字をネイティブ形式に自動的に変換するように設定されていないことを確認してください (例: \r\n を \n に)。コンテンツがメタデータと一致しないためです。これにより、ダンプ ファイルが役に立たなくなります。
sed または Vim を使用して最上位ディレクトリを置き換えますが、このディレクトリ名はプロジェクト ファイル内にも含まれていました!!!! これにより、SVN ロード チェックサム エラーが発生します。
したがって、この操作を実行するときは、パス名のみの sed で文字列置換を行わないでください。
「Node-path: old_path」を「Node-path: new_path」に置き換えます。詳細については、SVN ブックの第 5 章「リポジトリ管理」を参照してください。