4

私の元の質問は以下でした。それ以来、これを機能させることができるかどうかを確認するために、いくつかのことを試しました。

次のような小さなシェルスクリプトがあります。

svnadmin dump -r108917 ./repo \
    | svndumpfilter include /KeyManagement \
          --drop-empty-revs \
          --skip-missing-merge-sources \ 
          --renumber-revs > km.svndump \

while read rev
do
    svnadmin dump -r$rev --incremental ./repo \
        | svndumpfilter include /KeyManagement \
             --drop-empty-revs \
             --skip-missing-merge-sources \
             --renumber-revs >> km.svndump
done << km.revs.txt

km.revs.txt/KeyManagmentプロジェクトへの変更を含むリビジョンのみを含むテキスト ファイルです。

最初にこれを行ったとき、後でフィルタリングを行うと思っていました。ただし、最初にダンプされたリビジョンではkm.svndump、サイズが 68 ギガバイトを超えました。おっと。2 回目の試行では、プロジェクトを でフィルタリングしていsvndumpfilterます。

これはかなり長い間実行されました(私はこれを実行しnohup、時々チェックしました)。終了するとkm.svndump、UUID、最初のリビジョン、およびメモリ不足エラーが表示されました。どうやら、私のスクリプトはダンプされる最初のリビジョンに渡されませんでした。

続行する方法はありますか?


リポジトリの残りの部分とはまったく互換性のない特別なプロジェクトを含むリポジトリがあります。リポジトリ全体は、LDAP グループ内のすべてのユーザーが見ることができますDevelopment。ただし、あるプロジェクトには、そのプロジェクトに携わっている人だけに見せたい情報が含まれています。(当社の KeyManagement プロジェクト)。レポのレイアウトは次のようになります。

  • /trunk- レポの残りのトランク
  • /branches- レポの残りのブランチ
  • /tags- レポの残りのタグ
  • /KeyManagement- 特別なキー管理プロジェクト。

のぞき見を防ぐために、svn_acces ファイルを使用して、これを見ることができるユーザーを指定します。KeyManagementこれにより、メンテナンスで多くの問題が発生しました。私は、独自の LDAP アクセス グループを持つ別のリポジトリを作成したいと考えています。(独自の LDAP グループを持つ複数のリポジトリが既にあります)。

問題は、リポジトリに 175,000 を超えるリビジョンがあり、それらのリビジョンのうち 124 のみが KeyManagement プロジェクトに関係していることです。175,000 のリビジョンをすべてダンプするには、約 30 時間以上かかります。必要なリビジョンだけをダンプできれば、ダンプ全体を数時間で完了できます。

他の問題はこれです:

$ svn log -r108917:108918 -v $REPO
------------------------------------------------------------------------
r108917 | svnadmin | 2011-03-23 00:46:04 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement

New folder KeyManagement
------------------------------------------------------------------------
r108918 | svnadmin | 2011-03-23 00:47:18 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement/trunk (from /trunk/KeyManagement:108917)
D /trunk/KeyManagement

Move the KeyManagement
------------------------------------------------------------------------

どうやら、KeyManagementかつては下にもあったらしい/trunk。ダンプとロードを使用した以前の経験でsvndumpfilterは、ダンプとロードの両方/KeyManagement/trunk/KeyMangement同時に行う必要があります。/trunk/KeyManagement正直なところ、アプリケーションは完全に作り直されており、誰もコードを気にしていないので、私は気にしません。

ダンプの最初のリビジョンが完全なリビジョンであることを理解しています。私がこのようなことをすることは可能ですか:

$ svnadmin dump -r108917:108918 old_repo > dump_file
$ svnadmin dump -r108103 --incremental old_repo >> dump_file #Revision with KeyManagement
$ svnadmin dump -r107429 --incremental old_repo >> dump_file #Revision with KeyManagement
...

$ svnadmin load --parent-dir new_repo < dump_file

KeyManagement に関係するリビジョンをダンプするだけです。の下のバージョンは気にしません/trunk。それ以来、プロジェクトは完全に改訂されていました。リビジョンを知っているので、これを行うためのシェル スクリプトを簡単に作成できます。KeyManagement に関係するリビジョンには、他のプロジェクトが絡んでいるものはありません。

これを行うのに40時間以上かかりたくありません。

4

1 に答える 1

0

私はついにsvnrdumpを使用しました。すべてのリビジョンをダンプする必要がありましたが、/KeyManagement のみが必要であると指定できました。svndumpandを使用すると、 andsvndumpfilterを指定する必要があります。これは、元のプロジェクトがあった場所だからです。/KeyManagement /trunk/KeyManagment

残念ながら、svndumpfilteronsvnrdumpを使用することはできません。また、すべてのリビジョンが報告されたので、番号を付け直して空のリビジョンを除外することはできませんでした。

ディレクトリsvnrdumpの場所を変更したり、空のリビジョンをスキップして番号を付け直したりすることはできませんでしたが、1 つのディレクトリしかキャプチャできませんでした。

于 2014-09-11T17:18:25.817 に答える