web-dev-qa-db-ja.com

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

「project」という名前のSubversionリポジトリに「docs」フォルダーがあります。 「project_docs」という名前の別のSubversionリポジトリの下に実際に保管する必要があるという結論に達しました。

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

155
leftend

リポジトリ自体(作業コピーではない)にアクセスできる場合は、現在のリポジトリをダンプし、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

リポジトリへのアクセスなしでは、改訂履歴を維持できず、ファイルを新しいリポジトリにコピーしてコミットすることで解決する必要があります。

182
Samuel

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

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

30
compie

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

6
Adam Bellaire

将来の参考のために:

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

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

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

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

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

2
nios

リモートで(つまり、ローカルコピーなしで)実行できるとは思わない。しかし、これはうまくいくはずです: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、これは履歴を削除します。 svnadminSamuelが説明する として使用します。

2
Peter Stone

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

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

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を簡単に編集できます。

1
Renato