小さなマニュアルを読んだ後、最初のリポジトリを作成することにしました。 そして突然、私は少し考えましたが、複数のプロジェクトがある場合に構造を整理する方法...そして私はプロジェクトに分割されたツリーを作成し、各プロジェクトで誰もがトランク、タグ、ブランチに精通することを自分で決めました。 時間が経つにつれて、プロジェクトの数は増えましたが(それほどではありませんが、それでも)、プロジェクトのリビジョンのエンドツーエンドの番号付けを観察することは何となく悲しくなりました。 つまり プロジェクトログを見ると、最初に649のリビジョンがあり、次に700のリビジョンがあります。プログラマーは意欲的な人たちです。すべてが棚に置かれているとき、彼らはそれを愛しています。
だから、すべてが「風水」に従っているという簡単な指示
いくつかの初期データ:
-  物理リポジトリの場所: 
      
 
 /home/user/svn/reps/projects
 
 
 
 
 
 
-  リポジトリへのアクセスはApacheを介して設定され、アドレスがあります http://svn.mysite.ru 
 
 以前は、/home/user/svn/reps/projects
 
 
 
 指すSVNPath変数が使用されていましたが、 プロジェクトを分離し、変数を使用してアクセスを構成します
 
 SVNParentPath "/ home / user / svn / reps"
 
 
-  分割するリポジトリの構造: 
      
 
 http://svn.mysite.ru | |-モジュール | |-プロジェクト | | -Project1 | | -Project2
 
 
指示:
-  リポジトリをダンプする必要があります。 これを行うには、次のコマンドを実行します。 
      
 
 svnadmin dump /home/user/svn/reps/projects > myrep.dump
 
 
 
 
 
 
-  プロジェクトを1つだけ残す 
      
 
 cat myrep.dump | svndumpfilter include Projects/Project1 --drop-empty-revs --renumber-revs > project1.dump
 
 
 
 
 
 
 
 --drop-empty-revs-空のリビジョンを削除します
 
 --renumber-revs-リビジョンの番号を付け直します
 
 
 
 プロジェクトへの完全なパスを示す必要があります。 プロジェクト「Project1」の名前だけでなく、「Projects / Project1」。 それ以外の場合、出力は空のダンプファイルを取得します。
 
 
 
 一般に、前の2つのチームは組み合わせることができます
 
 svnadmin dump /home/user/svn/reps/projects | svndumpfilter include Projects/Project1 --drop-empty-revs --renumber-revs > project1.dump
 
 
 
 
 
 
-   「reps」フォルダーにプロジェクトの新しいリポジトリを作成します 
      
 
 svnadmin create project1
 
 
 
 
 
 
-  クリアされたダンプを新しいリポジトリにアップロードします 
      
 
 svnadmin load project1 < project1.dump
 
 
 
 
 
 このステップでエラーが発生します
 
 svnadmin: File not found transaction '0-0', path Projects/Project1
 
 
 
 、つまり、Projectsフォルダーが存在しないことを意味します。 復元中に、構造が再作成されていないようです。
 
 これを修正するには、プロジェクトフォルダーを手動で作成する必要があります。
 
 svn mkdir http://svn.mysite.ru/project1/Projects -m「プロジェクトフォルダーの作成」 
 
 そして今、私たちは安全に実行できます:
 
 svnadmin load project1 < project1.dump
 
 
 
 
 
 
-  なぜなら 古い構造を繰り返す新しいリポジトリの構造を取得する場合、「Project1」フォルダからリポジトリのルートにすべてを転送し、「Projects」フォルダを削除する必要があります 
      
 
 
ここで私は「すべて」を書き、それに終止符を打ちたいと思います。 しかし、それでも、これらの4つのポイントのうち、軟膏にハエがあります。
プロジェクトの作業中に名前を変更した場合、2番目のステップで
Invalid copy source path '  '
      
      エラーが発生します。
通常の
svndumpfilter
      
      プログラムではこの問題を解決できません。
いくつかの検索の後、この制限を回避することができるpython svndumpfilter2で記述されたスクリプトを見つけました。
スクリプトをコンピューターにダウンロードし、コマンドを入力します
cat myrep.dump | svndumpfilter2 --drop-empty-revs --renumber-revs /home/user/svn/reps/projects Projects/Project1 > project1.dump
      
      svndumpfilterとはいくつかの違いがあります。
-  リポジトリの物理的な場所へのパス、つまり/ home / user / svn / reps / projectsを指定する必要があります 
      
 
 
-  インクルードキーのみがサポートされています。  (指定する必要はありません) 
      
 
 
さて...すべて。
注:この記事を書き始めたとき(そしてこれは1週間前でした)、Habréで検索しても類似したものは見つかりませんでした。 しかし、以来 私の出版が少し延期されたため、SVNリポジトリを復元する同様の記事が登場しましたが、 そこにはいくつかの問題がカバーされていないように思えるので、記事を公開することにしました。