svn diff で改行コードを無視する

  svn diff で改行コードを無視する場合は、-x --ignore-eol-style を指定する。

$ svn diff -x --ignore-eol-style

Subversion 1.6 で zsh の補完が失敗する

$ cd /usr/share/zsh/site-functions
$ sudo wget -c http://gvn.googlecode.com/svn/trunk/contrib/zsh/_subversion

- ref.: Re: Subversion 1.5 and ZSH Completion
  http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId= ...

Subversion で特定のファイルを以前のリビジョンに戻す方法

  なんらかの理由で、特定のファイルを以前のリビジョンに戻したいとき。

$ svn merge -r 9:6 foo.c
U foo.c

  ちなみに、以下のようにパスを指定して実行するとエラーが出ます。

$ svn merge -r 9:6 path/to/foo.c
svn: Cannot replace a directory from within (ディレクトリを内側から置換することはできません)

  この場合は、svn merge する前に該当のディレクトリに移動する必要があります。

$ cd path/to
$ svn merge -r 9:6 foo.c

".svn" を隠す方法

- ".svn"を隠す。 - ぐらめぬ・ぜぷつぇんのはてダウンロード
  http://d.hatena.ne.jp/msakamoto-sf/20080403/1207190473

  .htaccess で .svn を隠す方法ということですが、以前調べたことがあって mod_rewrite が使えるならば、以下のようにして隠すことが出来ると思います。

RewriteEngine On
RewriteRule ^(.*/)*\.svn/ / [F,L]


  また、.htaccess を利用しなくとも、.svn のパーミッションを 0700 あたりにしても大丈夫な場合もあります。

$ find . -name .svn -type d | xargs -i chmod 0700 {}

  httpd.conf がいじれる環境であれば上記エントリに示してあるとおり

<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>


  これが一番簡単な気がします。

ネイティブのエンコーディングから 'UTF-8' に文字列を変換できません (Can't convert string from native encoding to 'UTF-8') の対処法

  UTF-8 なホストに、EUC-JP のターミナルで接続している場合 (export LANG=ja_JP.eucJP してある) に、svn で以下のようにエラーが発生しました。

$ svn st
svn: Can't convert string from native encoding to 'UTF-8':
(svn: ネイティブのエンコーディングから 'UTF-8' に文字列を変換できません:)

  UTF-8 なファイル名をもつファイルで引っかかっているようです。
  この場合は以下のようにして、一時的に ja_JP.UTF-8 にしてあげるとうまくいきます。

$ env LANG=ja_JP.UTF-8 svn st

  もっとも、普通に UTF-8 なターミナルで export LANG=ja_JP.UTF-8 して動かすのが一番だと思いますが、まあこんな状況もあるということで。

Subversion + WebDAV で複数のリポジトリを扱う方法

  Subversion + WebDAV で単純に一つのリポジトリを扱う場合は,以下のような設定をします.

<Location "/repos/foo">
    DAV svn
    SVNPath /path/to/repos/foo
</Location>


  これに,/path/to/repos/bar のようなリポジトリを追加して使いたい場面が出てきます.
  その場合は,以下のように SVNParentPath を使って共通の親ディレクトリを指定してあげると便利です.

<Location "/repos">
    DAV svn
    SVNParentPath /path/to/repos
</Location>


  こうすることで,リポジトリを追加するたびに Apache の設定をする必要がなくなります.

- ref.: httpd, Apache HTTP サーバ
  http://subversion.bluegate.org/doc/ch06s04.html

Subversion で作業コピーの URL を変更する方法

  サーバ側の都合で Subversion のリポジトリの場所を変更した場合,その作業コピーでは元の URL にアクセスできなくなります.
  例えば,リポジトリを file:///repos から file:///new-repos に移動した場合,以下のようなエラーになります.

svn: No repository found in 'file:///repos'

  これを解決するには,新しい作業コピーをチェックアウトしてもいいのですが,svn switch を使って,URL を書き換えてしまう方法もあります.

svn switch --relocate file:///repos file:///new-repos

  これは file:///repos から file:///new-repos に URL を書き換えるということになります.
  svn:// や svn+ssh:// の場合もこれでいけます.

- svn switch
  http://subversion.bluegate.org/doc/re28.html

- 追記
  ブランチのように同じリポジトリ内の異なるパスに再配置しようとすると,以下のようにエラーが出ます.

Relocate can only change the repository part of an URL
relocate は、URL のリポジトリ部分しか変更できません

  この場合は,--relocate をつけずに単なるパスの切り替えだけでできます.

svn switch file:///repos/branches/foo .

- 追記 (2009-10-30)
  TortoiseSVN の場合は、単に「再配置」を行えば OK です。

TracWebAdmin を日本語化する

  ブラウザ経由で Trac の設定を行う TracWebAdmin プラグインを日本語するパッチを作りました.

- パッチ: webadmin-r4429-ja.patch
  http://pocari.org/tools/trac/webadmin/webadmin-r4429-ja.patch

- 日本語化した egg ファイル
  egg ファイルは python のバージョンにあわせて作るものらしいです.
  python 2.3 で作ったものをおいておきます (でも,これで動くかどうか分かりません).

- python 2.3 で作った egg ファイル
  http://pocari.org/tools/trac/webadmin/TracWebAdmin-0.1.2dev-py2.3.egg

- 動作確認環境
o Trac 10.2
o Python 2.3
o Solaris 10

  パッチの適用方法は以下のようになります.

1. TracWebAdmin の最新版を取得する

  http://trac.edgewall.org/browser/sandbox を見てみたところ最新リビジョンは 4429 のようですので,このリビジョンを取得します.

$ svn export -r 4429 http://svn.edgewall.com/repos/trac/sandbox/webadmin/
A    webadmin
A    webadmin/webadmin
A    webadmin/webadmin/web_ui.py
A    webadmin/webadmin/htdocs
A    webadmin/webadmin/htdocs/css
A    webadmin/webadmin/htdocs/css/admin.css
A    webadmin/webadmin/htdocs/img
A    webadmin/webadmin/htdocs/img/collapsed.png
A    webadmin/webadmin/htdocs/img/expanded.png
A    webadmin/webadmin/htdocs/js
A    webadmin/webadmin/htdocs/js/admin.js
A    webadmin/webadmin/plugin.py
A    webadmin/webadmin/__init__.py
A    webadmin/webadmin/perm.py
A    webadmin/webadmin/ticket.py
A    webadmin/webadmin/basics.py
A    webadmin/webadmin/logging.py
A    webadmin/webadmin/templates
A    webadmin/webadmin/templates/admin_perm.cs
A    webadmin/webadmin/templates/admin_basics.cs
A    webadmin/webadmin/templates/admin_enum.cs
A    webadmin/webadmin/templates/admin_version.cs
A    webadmin/webadmin/templates/admin_plugin.cs
A    webadmin/webadmin/templates/admin_milestone.cs
A    webadmin/webadmin/templates/admin.cs
A    webadmin/webadmin/templates/admin_log.cs
A    webadmin/webadmin/templates/admin_component.cs
A    webadmin/setup.py
A    webadmin/COPYING
A    webadmin/setup.cfg
Exported revision 4429.

2. パッチを当てる

$ cd webadmin
$ patch -p0 < ../webadmin-r4429-ja.patch

  これで日本語化されます.

3. egg を作る

$ python ./setup.py bdist_egg

  これで,dist の中に TracWebAdmin-0.1.2dev-py2.3.egg のような egg ファイルが出来上がります.

4. プラグインをインストールする

  /usr/lib/share/trac/plugins とか /path/to/project/plugins とかにコピーして,trac.ini に以下のように記述します.

[components]
webadmin.* = enabled


- スクリーンショット



- 注意事項
  日本語化といっても,説明の文章は翻訳していませんので,ご注意ください.
  あと,私は python については全くの素人ですので,egg ってなに?とか聞かれてもよく分かりません.

Subversion で直前のコミットを取り消し,なおかつ Trac も同期する方法

  勢い余ってコミットしたはいいけど,恥ずかしい間違いがあってコミットをなかったことにしたい場合の対処方法です.

対象のリポジトリ /svn/foo  
現在のリビジョン 100       
直前のリビジョン 99        
対象の Trac 環境 /trac/foo

1. 取り消したいリポジトリをディレクトリごとバックアップする

 $ mv /svn/foo /svn/foo.bak

2. 同名のリポジトリを作成する

 $ svnadmin create /svn/foo

3. バックアップしたリポジトリから直前までのリビジョンをダンプして,新しく作ったリポジトリにロードする

 $ svnadmin dump -r 0:99 /svn/foo.bak | svnadmin load /svn/foo

  これで,リビジョン 99 までのリポジトリが完成します.

4. Trac と同期する

$ trac-admin /trac/foo resync

  以上,はてブしておいた記事がそのまま役に立ちました.ふー.

- YappoLogs: 悪のりで学ぶsvnadmin/trac入門実用編
  http://blog.yappo.jp/yappo/archives/000477.html

- ref.: svnadmin dump
  http://subversion.bluegate.org/doc/re33.html

- ref.: svnadmin load
  http://subversion.bluegate.org/doc/re38.html

TortoiseSVN で公開鍵を使う方法

  TortoiseSVN で svn+ssh を利用した場合に,認証をパスフレーズではなく公開鍵で行う方法を紹介します.

  SSH クライアントには TortoiseSVN 付属の TortoisePlink を使います.
  TortoisePlink は PuTTY 由来らしいので PuTTY 形式の鍵を使う必要があるみたいです.

  PuTTY 形式の鍵を生成したり,OpenSSH の鍵を PuTTY 形式に変換したりするために,PuTTYgen が必要になります.
  PuTTYgen は以下のサイトで入手できます.この記事の執筆時点の最新版は 0.58 です.

- PuTTY Download Page
  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

1. 鍵を新たに作成する方法


  1. 鍵の生成
     PuTTY を起動し右中央部にある [Generate] を選択します.
     マウスをひたすら動かしていると,そのうち鍵が生成されます.

  2. 公開鍵をサーバに登録
     Public key for pasting into OpenSSH authorized_keys file の部分をコピーして
     $HOME/.ssh/authorized_keys に貼り付けます.
     
     $HOME/.ssh/authorized_keys がない場合は作成しましょう.

  3. 秘密鍵の保存
     右中央部にある [Save private key] を選択します.
     PuTTY の秘密鍵の拡張子は ppk になります.ここでは

   C:\keys\svn.ppk

     として保存します.
     秘密鍵のパスフレーズは,同じ画面の「Key passphrase」で設定します.

  4. TortoiseSVN で公開鍵を使うように設定
    「TortoiseSVN 設定」の「ネットワーク」を開きます.
    「SSH クライアント」に TortoisePlink を選択して,先ほど作成した秘密鍵を以下のように指定します.

   TortoisePlink -C -l username -i C:\keys\svn.ppk

     username はユーザ名です.-C オプションは圧縮を有効にするオプションです.
     

  以上が,鍵を新たに作成した場合の TortoiseSVN で公開鍵を使う方法になります.

2. 既にある OpenSSH の鍵を PuTTY 形式に変換する方法


  1. 鍵の変換
     PuTTY を起動し右中央部にある [Load] を選択します.
     秘密鍵にパスフレーズが設定してある場合は,パスフレーズの入力画面が表示されるので,パスフレーズを入力します.

     すぐに PuTTY 形式の鍵に変換されます.

  2. 秘密鍵の保存および TortoiseSVN で公開鍵を使うように設定
     上記「1. 鍵を新たに作成する方法」の「3. 秘密鍵の保存」からの手順と全く同じになります.

  以上が,OpenSSH の鍵を PuTTY 形式に変換した場合の TortoiseSVN で公開鍵を使う方法になります.

3. 確認

   試しに,コミットログを表示するなどしてみてください.
   パスフレーズによる認証のときは,以下のように「Password」という入力画面が表示されました.

   Password

   しかし,公開鍵認証の場合は,以下のように「Passphrase for key "..."」という入力画面が表示されます.

   Passphrase

- tortoisesvn.tigris.org
  http://tortoisesvn.tigris.org/