Subversionリポジトリをパーツに分割する

バージョン管理システムについて初めて知ったとき、私はこの開発ツールを絶対に試してみることにしました。 当時、私はそれが何であるかほとんど知りませんでした。 したがって、利用可能なオファーを見て、Subversionを選択しました。

小さなマニュアルを読んだ後、最初のリポジトリを作成することにしました。 そして突然、私は少し考えましたが、複数のプロジェクトがある場合に構造を整理する方法...そして私はプロジェクトに分割されたツリーを作成し、各プロジェクトで誰もがトランク、タグ、ブランチに精通することを自分で決めました。 時間が経つにつれて、プロジェクトの数は増えましたが(それほどではありませんが、それでも)、プロジェクトのリビジョンのエンドツーエンドの番号付けを観察することは何となく悲しくなりました。 つまり プロジェクトログを見ると、最初に649のリビジョンがあり、次に700のリビジョンがあります。プログラマーは意欲的な人たちです。すべてが棚に置かれているとき、彼らはそれを愛しています。



だから、すべてが「風水」に従っているという簡単な指示



いくつかの初期データ:



指示:

  1. リポジトリをダンプする必要があります。 これを行うには、次のコマンドを実行します。

    svnadmin dump /home/user/svn/reps/projects > myrep.dump





  2. プロジェクトを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





  3. 「reps」フォルダーにプロジェクトの新しいリポジトリを作成します

    svnadmin create project1





  4. クリアされたダンプを新しいリポジトリにアップロードします

    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





  5. なぜなら 古い構造を繰り返す新しいリポジトリの構造を取得する場合、「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とはいくつかの違いがあります。





さて...すべて。



注:この記事を書き始めたとき(そしてこれは1週間前でした)、Habréで検索しても類似したものは見つかりませんでした。 しかし、以来 私の出版が少し延期されたため、SVNリポジトリを復元する同様の記事が登場しましたが、 そこにはいくつかの問題がカバーされていないように思えるので、記事を公開することにしました。



All Articles