あるSubversionリポジトリから別のSubversionリポジトリに複数のフォルダを移動する
Subversion 1.4.2がインストールされているcentOS 6.4サーバーがあります。私のサーバーには2つのSubversionリポジトリがあります。
私は過去2年4ヶ月間「repoOLD」を使用してきました。
「repoOLD」には100個のフォルダ(プロジェクト)が含まれています。
「repoNEW」が作成されたばかりで、「repoOLD」から「repoNEW」にいくつかのアイテムをコピーする必要があります。
これで問題は、私の「repoOLD」から「repoNEW」に複数のフォルダ(プロジェクト)を転送する方法です。
インターネットを検索しようとしましたが、あるSubversionリポジトリから別のリポジトリに複数のフォルダを移動する方法のチュートリアルが見つかりません
答え1
他の人がSubversionを直接使用してより良い回答を投稿することもできますが、Pythonの機能が優れているので、Subversionにgit
変換してからSubversionに変換する方法を提案します。git
filter-branch
古いsvnリポジトリをローカルのgitリポジトリに複製します。
git svn clone <url-for-repoOLD>
ここで、ローカルレプリカgit
がディレクトリに保存されていると仮定します。repoOLD
git cloneで望ましくないものをすべてフィルタリングしてください。
これで、不要になった新しいリポジトリのすべてのエントリを削除します。
cd repoOLD
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch dirA dirB dirC dirD' \
--prune-empty --tag-name-filter cat -- --all
...dirA dirB dirC dirD
不要になったディレクトリはどこにありますか?削除するすべての項目を一覧表示する必要があります。
ls
必要なものが含まれていることを確認するには、などを使用してgit log
このリポジトリを確認してください。
新しいsvnリポジトリをローカルのgitリポジトリに複製します。
cd .. # (get out of repoOLD if you are still in there)
git svn clone <url-for-repoNEW>
ここで、ローカルレプリカgit
がディレクトリに保存されていると仮定します。repoNEW
また、repoNEWに何もコミットしていないか、repoOLDから何もインポートしていないため、この時点ではrepoNEWが完全に空であるとします。
git
repoOLDクローンからすべてを取得します。
cd repoNEW
git remote add repoOLD ../repoOLD
git fetch repoOLD
git merge repoOLD/master
これで、これらの変更をrepoNEW svnサーバーに戻します。
git svn dcommit