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
--- 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]

前提省略して実際にやってみた。
リポジトリのリビジョンの取り消しより
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: 気の向くままに・・・
カテゴリ: svn

最終更新時間: 2013-05-02 16:12