SVNのリポジトリを切り出す際のエラーと対処方法

このQ&Aのポイント
  • SVNのリポジトリを切り出す際にエラーが発生する場合の対処方法について教えてください。
  • svndumpfilterコマンドを使用して指定したフォルダのみをリポジトリとして切り出すことができますが、依存関係のあるファイルも一緒に切り出さないとエラーが発生します。自動的に依存関係のあるファイルも切り出す方法はありますか?
  • SVNのリポジトリを切り出す際にファイルが見つからずエラーが発生する場合、リポジトリ化したいフォルダだけでなく、依存関係のあるフォルダも一緒に切り出してからリポジトリ化する必要があります。
回答を見る
  • ベストアンサー

svnadmin loadをするとエラーする

現在SVNのリポジトリが30Gbyteくらいもあるので、そのリポジトリないにある複数のプロジェクトとしているフォルダ毎をリポジトリとして独立させようと思っています。 まず ”/test/project/proj1”というフォルダをsvndumpfilterで切り出してみるために この次ののコマンドを実施しました。 C:\mywork\>svnadmin dump test_works | svndumpfilter include --drop-empty-rev s --renumber-revs test/project/proj1 > proj1_source.dat これで”test/project/proj1”プロジェクトフォルダのみのファイルをdumpすることができました。 そして”proj1_source”という空のリポジトリフォルダを作成し、 svnadmin load /proj1_source < proj1_source.dat とやってみると、 つぎのようなエラーが出てきます。 <<< オリジナルのリビジョン 1 に基づき、新しいトランザクションを開始しました svnadmin: E160013: ファイルが見つかりません: トランザクション 0-0, パス 'test/project/proj1' このようなエラーが出た場合にどのように対処したら良いのか教えて頂けないでしょうか。 http://dqn.sakusakutto.jp/2012/08/svndumpfilter_subversion.html こちらのサイトを見てみるとincludeで切り出してリポジトリ化したいフォルダだけ取り出したとしても、履歴に関係する依存関係のフォルダも一緒に切り出してからsvnadmin loadしないとエラーとなってしまうということが書いてあるようですが、svndumpfilter時にそれらの依存関係のあるファイル群も一緒に自動的に切り出してくれるようなやり方などありませんでしょうか? どうぞ、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

同じく…試したことはない……ですね。 複数のプロジェクトを1つのリポジトリに入れることはあまりありませんし。 # SVNサーバ自体が自分の管理下なので必要になればリポジトリ新設して対応可能だし。 手元にあるリポジトリで、branchsだけ切り出す。 なんてのをやってみたら…… svndumpfilter時に >Revision 35 skipped. >svndumpfilter: Invalid copy source path '/trunk' >プロセスが、存在しないパイプに書き込もうとしました。 とか言われてしまいました。 # 実際にダンプできていたのかは不明。 >svndumpfilter時にそれらの依存関係のあるファイル群も一緒に自動的に切り出してくれるようなやり方などありませんでしょうか? includeではなく、不要なプロジェクトをexcludeで外す…という方法ではどうですかね? 複数あるならパイプで繋いで一つずつ外していけばよいかと。 # branchsやtagsの中がどうなるか…ってのはありますかねぇ。 # まずはそっちのをexcludeで外していって、最後にtrunk…かなぁ??? >現在SVNのリポジトリが30Gbyteくらいもあるので ビルドのたびに生成される中間ファイル(オブジェクトファイルなど)はリポジトリに含めない方がいいですよ。 と忠告はしたような気がしますが……。 # ちょっと過去の質問とか検索したけど見つからん。……別の人だったかな。 SVNの関係上テキストファイルなら差分で持つけど、バイナリファイルはコミットごとにまるまる保存されていく……ハズ。

diy_sunny
質問者

お礼

回答頂きありがとうございます。やはりbranchとか繰り返して作業した場合には依存関係が複雑になるので、それらをチェックしながら綿密に切り出しとかやらないといけないんだなということがわかりました。 ちょっと頼まれた人からもソースコードのテキスト以外にバイナリが多すぎるとリポジトリがとても重くなるので、やめて新規のリポジトリを立ててほしいみたいな同じようなことを言われています。 私としては簡単に、短時間でリポジトリの一部切り出し移動とかができるのであれば、今までの変更履歴もshowlogで参照しやすいだろうなと思ってたのですが、ようやくあきらめられそうです。 includeよりもexcludeでちょっとずつリポジトリのダイエットを進めていったという方のサイトを見て、私はまだやっていませんが何となく理解できました。 助かります。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

エラーメッセージを含めて検索しただけで試したことはない.

参考URL:
http://kgirlssworld.blogspot.jp/2012/08/svn-repository-migration.html
diy_sunny
質問者

お礼

回答頂きありがとうございます。svndumpfilterの解説ページ紹介頂きありがとうございます。助かります。

関連するQ&A

  • VC++2010の「#include <」

    VC++ で、他人の作ったソースコードをビルドして実行してみています。 (WinPcapのデベロッパ向けのライブラリを使った、サンプルプログラムです。) VC++自体、あまり理解が深くないのですが、 「#include <」まで書くと、「ヘッダファイル名が表示される」プロジェクトと、「そうではない」プロジェクトがあります。 「そうではない」方のプロジェクトだと、ビルド時にincludeするライブラリが足りないとか、そんな感じのエラーが表示されます。 ぱっと見の違いは、「ヘッダファイル名が表示される」プロジェクトの場合は、 ソリューションエクスプローラに、「外部依存関係」というフォルダのショートカットがあり、ライブラリがどっさりあります。 「そうではない」プロジェクトについても、「#include <」で、ヘッダファイルを表示してくれるようにしたいのですが、どの様にすればよいのでしょうか?★ プロジェクトのプロパティの、 C++>プリプロセッサ>プリプロセッサの定義 リンカー>入力>追加の依存ファイル はどちらのソースも同じにしたのですが…。

  • インクルードパスを相対パスで指定

    Visual C++ 2017を使用したプロジェクト開発で、次のようなディレクトリ構造になっているとします。 root/  └ dev/    └ L1/      ├ L2/      │ ├ L3/      │ │ └ L4/      │ │   └ MyProj(開発用ディレクトリ)      │ └ foo/      │      └ include/ プロジェクトファイルやソースファイルは全てMyProjの直下にあります。 L2と同じ階層にあるincludeディレクトリにあるtest.hをソースファイルにインクルードするために、次のような#include文を記述します。 #include "../../../include/test.h" これで問題なくコンパイルが通ります。 次に、プロジェクトのプロパティの「追加のインクルードディレクトリ」に"../../foo"を追加します。 これは次のようなオプションと解釈されてコンパイラに渡されます。 /I"../../foo" fooというディレクトリのみを参照パスに追加するつもりで、プロジェクトファイルからの相対パスで指定しました。 さてここで#include文を次のように書き換えてみました。 #include "../../include/test.h" これでコンパイルが通るのです。 ソースファイルからtest.hへの相対パスは ../../../include/test.h のはずですが、なぜこれでコンパイルが通るのでしょうか? ちなみに「追加のインクルードディレクトリ」に何も指定しない状態では、includeファイルを開けないと出てコンパイルエラーとなります。 なのでこの設定が影響しているのだとは思いますが。

  • includeファイルの読み込み追加の際のコインパイルエラー

    VC初心者で初めて質問させて頂きます。 仕事でVC++6.0にて開発を行っています。 既設で正常に動作しているプロジェクトに対して ロジックを追加しなければいけないのですが、 その際、同プロジェクト内で定義されていない 変数を使用したく、includeファイルの 読み込みを追加(#include "aaa.h")し、参照しようと したのですが、以下のようなコンパイルエラーが 発生してしまいます。 '***' 定義されていない識別子です。 ***:追加したincludeファイル内にて定義されている    変数 紐付けがうまくいってないと思うのですが プロジェクトの設定画面にて、インクルードファイル のパスを確認したところ既設にてパスは存在して いました。 同様に依存関係を確認したところ、必要な ヘッダファイルは全てありました。 関係あるかはわかりませんが、クリーン→ビルド しても状況は変わりませんでした。 パスが通っているなら単純にインクルードファイルを 読みこんで参照すればいいと思うのですが、 何か他に必要なことがあるのでしょうか 初めての質問ということで、質問の仕方が 分かりづらい点もあるかと思いますが 宜しくお願い致します。

  • Subversionの特定のリポジトリの削除の仕方

    Subversionのリポジトリから、ある特定のプロジェクトのフォルダをごっそりそのまま削除したいのですが(このプロジェクトのレイアウトを大幅に変更したくなったので)、やり方が分かりません。 具体的には、以下のことをしたいと思っています。 今、プロジェクトが以下のような感じになっていたとします。 $ svn ls file:///home/foge/Svn/ Csharp/ Perl/ PowerPoint/ ここから"Csharp"のプロジェクトだけをリポジトリからごっそり削除したいのです。 マニュアルを読むと、一度、ダンプファイルを作成して、svndumpfilterのexcludeというコマンドで特定のパスだけ削除できるのかなと思ったのですが、今いち何が起きるのかよく分かりません。 正式なやり方でなくても良いので、とにかく削除する方法を教えてください。

  • dlopenで目的の*.soファイルをロードできません

    以下C++のテストソース2ファイルをコンパイルし実行したのですが、libtest.soをロードすることが出来ません。OSはRed Hat Linux EL4.0WS、カーネルは2.6.9-5です。原因と思しき点がお分かりの方がいれば、教えて頂けますでしょうか。 ********** ソースファイル1(libtest.cpp) ********** #include <stdio.h> #include <stdlib.h> extern "C" {void printTest();} void printTest(){ printf(" *** SUCCESS!! *** Java - Native Interface test at INOAC\n"); } ********** ソースファイル2(test.cpp) ********** #include <dlfcn.h> #include <stdio.h> #include <stdlib.h> static void (*testFunc)(); int main(){ void *library; const char * error; library = dlopen("libtest.so",RTLD_LAZY); if(library==NULL){ printf("Could not open libtest.so\n"); exit(1); } dlerror(); testFunc = (void (*)())dlsym(library,"printTest"); error = dlerror(); if(error){ printf("Could not find the function printTest\n"); exit(1); } printf("Test from C;\n"); (*testFunc)(); dlclose(library); return 0; } ********** 実行方法 ********** pgCC -fPIC -shared libtest.cpp -o libtest.so pgCC -ldl test.cpp -o test.exe setenv LD_LIBRARY_PATH "." ./test.exe

  • SubVersion バックアップ方法

    SubVersionのリポジトリを定期的に、バックアップ取りたいと思っております。 *** 環境 *********************************** Windows2000Server SubVersion 1.6.4. + Apache HTTP Server 2.2 ******************************************* 毎日決まった時間に 「月~土」は、差分バックアップをとり「日」は、 フルバックアップを取りたいです。 dumpファイルでのバックアップ方法は、 「svnadmin dump」 で実行し、引数指定にて差分バックアップも行えることが分かったのですが、これをスケジューリングする方法が分かりません。 自動でバックアップをとる方法を、教えてください。

  • eclipse3.6でコンパイルできません

    (環境) ・Windows7 Home Premium(64ビット) ・Pleiades All in One C/C++3.6.1.20101025(JREあり)  →C:\eclipse36内に展開 (問題) eclipse3.6(Pleiades)でC++のソースコードがコンパイルできません (状況) ・プロジェクト新規作成時の「ツールチェーン」には「MinGW GCC」の表示があります。 ・作成したプロジェクトのプロパティにはMinGWの項目が表示されません:  プロジェクトのプロパティ画面左にある「C/C++ビルド」項目内の  「設定」を選択したところ、右画面「ツール設定」のページにMinGWの項目が表示されていません (プロジェクト「test」のソースコード「test.cpp」) #include <iostream> using namespace std; int main(){ cout << "test" << endl; } ・上記ソースコードのビルド時に 「無効なプロジェクト・パス:インクルード・パスが見つかりません」と警告が表示されます。 (C:\eclipse\workspace\test\MinGW\include) 「Debug」フォルダ内には.oファイルや.aファイルは作成されます。 ・「Debug」フォルダ内の「test.o」を「実行」すると、 >プロセス開始中のエラー。 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 と表示されます。 ・「test.o」を「デバッグ」すると、 「Target request failed: Error creating process C:\eclipse36\workspace\test\Debug\test.o, (error 193).」 と表示されます。 圧縮ファイルを展開しただけで、何もしていませんので、 どう対応して良いか、皆目見当がつきません。 既出の問題かも知れませんが、ご教示いただければ幸いです。 よろしくお願いします。

  • C/C++の.libについて教えてください。

    こんにちは。 C/C++のライブラリファイルについて教えてください。 現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。 ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。 LibAでother()関数を利用するのに #pragma comment ( lib, "other.lib" )とソースコード上に記述しました。 (other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定します) ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。 しかし、other.libが開けませんと怒られてしまいます。 other.libを利用しているのはLibAなのでProj側でother.libを読み込むように強制されるのは面倒臭いのですが、LibA側にother()関数を埋め込むようなことはできないのでしょうか? LibAを利用するProjでもother.libを要求されないようにするにはどうすればいいでしょうか? /* スタティックライブラリを作成するためにLibAをコンパイルする時に#pragma comment ( lib, "other.lib" )の記述が不要というのは知っています。 LibAにその記述を行わなかった場合Projで自分で記述する必要があることも知っています。 */ 現在、私が思いついているのはother.libを作成するプロジェクトのソースコードを引っ張ってきてLibAに入れて一緒にコンパイルするくらいです。 日本語がへたくそでわかりづらいところがあるかとは思いますがよろしくお願いします。

  • DOMで\\localhost\~がloadできません

    DOMについて質問させてください。 DOMで\\localhost\~\test.xmlをloadすると、「指定されたパスが見つかりません。」が表示されloadできません。ちなみに、ループバックアドレスの\\127.0.0.1だとうまくいきます。なぜか理由が分からないため質問させていただきました。\\localhostでloadするには何かwindowsの設定がいるのでしょうか? ・再現手順は以下の通りです。 (1)DOMでCドライブ配下にサブフォルダを作成し、そのサブフォルダ内に共有フォルダを作成します。 (2)作成した共有フォルダ内にxmlファイルを格納します。 (3)DOMで共有フォルダ内のxmlファイルをロードするとエラーになります。 以下、サンプルコードです。(MSXMLのバージョンはどのバージョンでも現象は同じ) '================================================== Set objDOM = CreateObject("MSXML2.DOMDocument.6.0") objDOM.async = false rtResult = objDOM.load("\\localhost\~\test.xml") msgbox "load:" & rtResult & " エラー番号:" & objDOM.parseError.errorCode & " MSG:" & objDOM.parseError.reason Set objDOM = Nothing '==================================================

    • 締切済み
    • XML
  • gitを使っている人に質問です。

    gitでソース管理をしています。 gitではファイルをコミット、プッシュする用のリポジトリフォルダと、自分がローカルで作業する用の普通のフォルダ、2種類のフォルダで作業せよと教わったのですが、そうなんですか? 「Project」というフォルダを、リポジトリとしているとします。 そのコピーを「Project2」とし、ローカルでのファイルの修正はそこですると。 で、自分の修正が終わってコミット、プッシュする前に、 「Project」を最新にするためにそこで同期、プルを行います。 その後で「Project2」の中の自分が修正したファイルを「Project」の中に上書きし、その後にコミット、プッシュする。 そういう流れなんでしょうか? 滅茶苦茶分かり辛いのですが。 同じプロジェクトファイルが2つもあるなんて、ごちゃごちゃになりそうです。 上からはそういう風に指示されたけどそんなの面倒なので、「Project」の中のファイルをダイレクトに修正していました。 んでプッシュしようとしたら失敗しました。 別の人が、自分のと被らないファイルを修正したようでした。 ここで、自分がもしそのファイルを最新にせずにコミット、プッシュをしたら、自動でマージしてしまうか、私のローカルにあった古いファイルで上書きしてしまうのでしょうか??? 自分が修正したファイルだけをアップするんじゃないんですか? SVNやVSSならそうだったはずです。 GIT、意味不明です。 GITに反対します。 ご意見をよろしくお願いします。