CIFSのsvnリポジトリラッパ(追記)
2011-03-28-1 / カテゴリ: [svn][Apache][cygwin] / [permlink]
[2011-03-08-1]の設定だと、updateはできるけど以下のエラーでcommitができない。(場合がある、のかも。少なくとも自分のとこでは。ファイルサーバの具合の可能性?)
コンソール
んで、色々やった結果、ネットワークドライブのパスを
コンソール
svn: Can't chmod '/cygdrive/x/svn/db/tempfile.2.tmp': Permission denied svn: MKACTIVITY of '/repos/testrep/!svn/act/0000012ef9fa5ad6': 500 Internal Server Error (http://127.0.0.1:8080)Eclipseのダイアログだと「Error while creating module: org.tigris.subversion.javahl.ClientException」がエラーを拾ってるみたい。
んで、色々やった結果、ネットワークドライブのパスを
- SVNPath "/cygdrive/x/svn" + SVNPath "x:/svn"にすればOK。
Referrer (Inside):
[2011-03-08-1]
CIFSのsvnリポジトリラッパ
2011-03-08-1 / カテゴリ: [svn][Apache][cygwin] / [permlink]
某所のsvnリポジトリがCIFS(Windowsファイルサーバ)にしかなく、どうしても手元のeclipse(subclipse)からチェックアウトできなかったので、ローカルのApacheでsvnサーバを立ててラッパとして動作させた。
windows用のApacheバイナリだと、UNC/ネットワークドライブともに(ファイルが見えなかったりログオン不可と出力されたりで)どうしてもうまくいかなかったので、cygwinのApache+svnで構築。
入れるパッケージは
apache2
subversion
subversion-apache2
あたり。
とりあえずdav設定は[2008-02-22-1]の流れで特に問題なし。
デフォルトでDigest認証設定になってるので、Basicに変えるなりなんなりと。
設定ファイルは /etc/apache2/extra/httpd-dav.conf
Subversion用の設定はテンプレが見当たらなかったので他の環境から持ってきた。
extra/httpd-svn.confを作って
多バイト文字が入ったパスだと(UTF-8にしてても"Can't converet string from 'UTF-8' to native encoding"とか出力されて)うまくいかないけど…
まぁ、CIFSでSubversion使うなってことよ。
そういや、subclipseだとhostsを見ないようだ。http://localhost(:8080)だとアクセスできなかったけど、http://127.0.0.1(:8080)ならOK。
ググると file:/// も使えるような記述はあるんだけどなぁ…
[2011-03-28-1]追記。↑だとcommitできない。
windows用のApacheバイナリだと、UNC/ネットワークドライブともに(ファイルが見えなかったりログオン不可と出力されたりで)どうしてもうまくいかなかったので、cygwinのApache+svnで構築。
入れるパッケージは
apache2
subversion
subversion-apache2
あたり。
とりあえずdav設定は[2008-02-22-1]の流れで特に問題なし。
デフォルトでDigest認証設定になってるので、Basicに変えるなりなんなりと。
設定ファイルは /etc/apache2/extra/httpd-dav.conf
--- original/extra/httpd-dav.conf 2007-09-17 06:10:55.001000000 +0900 +++ extra/httpd-dav.conf 2011-03-08 13:27:22.246250000 +0900 @@ -16,5 +16,5 @@ -Alias /uploads "/usr/uploads" +Alias /repos "/var/repos" -<Directory "/usr/uploads"> +<Directory "/var/repos"> Dav On @@ -24,3 +24,3 @@ - AuthType Digest + AuthType Basic AuthName DAV-upload @@ -28,3 +28,3 @@ # htdigest -c "/usr/user.passwd" DAV-upload admin - AuthUserFile "/usr/user.passwd" + AuthUserFile "/etc/apache2/user/htpasswd" @@ -32,5 +32,6 @@ # to the admin user. - <LimitExcept GET OPTIONS> - require user admin - </LimitExcept> + #<LimitExcept GET OPTIONS> + # require user admin + #</LimitExcept> + require valid-user </Directory>あと、標準だとこのファイルがincludeされないのでhttpd.confにinclude追加する。(下記ラスト部分)
--- httpd.conf.default 2011-03-08 11:44:39.731750000 +0900 +++ httpd.conf 2011-03-08 12:47:10.558750000 +0900 @@ -39,3 +39,3 @@ #Listen 12.34.56.78:80 -Listen 80 +Listen 8080 @@ -110,2 +110,6 @@ +# svn +LoadModule dav_svn_module lib/apache2/mod_dav_svn.so +Include /etc/apache2/extra/httpd-svn.conf + <IfModule !mpm_netware_module> @@ -149,3 +153,3 @@ # -#ServerName www.example.com:80 +ServerName localhost @@ -446,3 +450,3 @@ # Distributed authoring and versioning (WebDAV) -#Include /etc/apache2/extra/httpd-dav.conf +Include /etc/apache2/extra/httpd-dav.conf
Subversion用の設定はテンプレが見当たらなかったので他の環境から持ってきた。
extra/httpd-svn.confを作って
<IfModule mod_dav_svn.c> <Location /repos/foo> DAV svn SVNPath "/cygdrive/c/work/repos" </Location> <Location /repos/testrep> DAV svn SVNPath "/cygdrive/x/svn" </Location> </IfModule>こんな感じ。(xはネットワークドライブ)
多バイト文字が入ったパスだと(UTF-8にしてても"Can't converet string from 'UTF-8' to native encoding"とか出力されて)うまくいかないけど…
まぁ、CIFSでSubversion使うなってことよ。
そういや、subclipseだとhostsを見ないようだ。http://localhost(:8080)だとアクセスできなかったけど、http://127.0.0.1(:8080)ならOK。
ググると file:/// も使えるような記述はあるんだけどなぁ…
[2011-03-28-1]追記。↑だとcommitできない。
Referrer (Inside):
[2011-03-28-1]
(svndumpfilter)コミットの取り消し
2010-01-11-1 / カテゴリ: [svn] / [permlink]
前提省略して実際にやってみた。
リポジトリのリビジョンの取り消しより
使うコマンド
直前の1リビジョンのコミットを全てなかったことにするのであれば、YappoLogs: 悪のりで学ぶsvnadmin/trac入門実用編のとおり、dump/load でいける。でも、特定のファイルのみをなかったことにするには dump/load のみでは対応できない。ここで svndumpfilter を使って、ダンプデータにパスでフィルタリングをかける。
これで、/foo/bar/baz 以下がなかったことになる。
3,4,5 はパイプで一撃でもいける
クライアント側は update/commit や、クリーンアップではなかったことにできなかった。よくわからなかったので、ファイルシステム上から単に削除した(^^;
参考
svndumpfilter: 気の向くままに・・・
リポジトリのリビジョンの取り消しより
TortoiseSVN は決してデータを失わないため、「巻き戻した」リビジョンはまだ中間リビジョンとして存在しています。HEAD リビジョンが以前の状態になっただけです。すべての痕跡を削除して、リポジトリから完全に見えなくする場合は、もっと極端な手段を採らねばなりません。これは本当に十分な理由がなければ、お勧めしません。考えられる理由としては、誰かが公開リポジトリに機密文書をコミットしたなどでしょう。
リポジトリからデータを削除する唯一の方法は、Subversion コマンドラインツールの svnadmin を使うことです。この実行方法の説明は、Repository Maintenance にあります。(訳注: 日本語訳は Subversion によるバージョン管理 にあります)
使うコマンド
直前の1リビジョンのコミットを全てなかったことにするのであれば、YappoLogs: 悪のりで学ぶsvnadmin/trac入門実用編のとおり、dump/load でいける。でも、特定のファイルのみをなかったことにするには dump/load のみでは対応できない。ここで svndumpfilter を使って、ダンプデータにパスでフィルタリングをかける。
1. 現リポジトリの退避
$ cd /path/svn $ mv repos repos.org
2. 元と同じ名前で空リポジトリの作成(フィルタ結果をここに置く)
$ svnadmin create repos
3. リポジトリのダンプ
$ svnadmin dump repos.org > repos.dump
4. ダンプのフィルタリング
$ svndumpfilter exclude '/foo/bar/baz' < repos.dump > repos.dump.newパスはリポジトリにおけるフルパス指定
5. フィルタ結果のリストア
$ svnadmin load repos < repos.dump.new
これで、/foo/bar/baz 以下がなかったことになる。
3,4,5 はパイプで一撃でもいける
$ svnadmin dump repos.org | svndumpfilter exclude '...' | svnadmin load repos
クライアント側は update/commit や、クリーンアップではなかったことにできなかった。よくわからなかったので、ファイルシステム上から単に削除した(^^;
参考
svndumpfilter: 気の向くままに・・・
最終更新時間: 2013-05-02 16:12