小さなマニュアルを読んだ後、最初のリポジトリを作成することにしました。 そして突然、私は少し考えましたが、複数のプロジェクトがある場合に構造を整理する方法...そして私はプロジェクトに分割されたツリーを作成し、各プロジェクトで誰もがトランク、タグ、ブランチに精通することを自分で決めました。 時間が経つにつれて、プロジェクトの数は増えましたが(それほどではありませんが、それでも)、プロジェクトのリビジョンのエンドツーエンドの番号付けを観察することは何となく悲しくなりました。 つまり プロジェクトログを見ると、最初に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リポジトリを復元する同様の記事が登場しましたが、 そこにはいくつかの問題がカバーされていないように思えるので、記事を公開することにしました。