1つのSubversionリポジトリから別のリポジトリに単一のフォルダーを移動するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/417726

質問

「ドキュメント」があります; " project"という名前のSubversionリポジトリ内のフォルダー。本当に" 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 を使用できます。 p>

これは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

編集:D'oh、これは履歴を削除します。 svnadmin Samuelの説明

今後の参照用:

SVNドキュメントは次のことを明確に報告しています。

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

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

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

代替&#8220;ノードパス:old_path&#8221; &#8220; Node-path:new_path&#8221;を使用します。 SVNブックの第5章&#8220;リポジトリ管理&#8221;をご覧ください。詳細については。

受け入れられた答えを使用しようとしましたが、巨大なリポジトリがあり、小さなディレクトリをエクスポートしたかったため、リポジトリ全体をダンプする余裕がありませんでした。

したがって、ディレクトリが変更されたリビジョンのみをエクスポートしました(エクスポートするディレクトリにリポジトリ内の他の場所への参照がある場合、これは機能しない可能性があります)。

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

リポジトリURL( URL_to_docs )、サーバー内の場所( / svn / old_repo )、リポジトリ内のドキュメントへのパス( path / to / docs

新しいリポジトリのdocディレクトリの場所を変更する場合は、 docs_only.dump を簡単に編集できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top