May 24, 2009

[Subversion] Subversion サーバの移行

Subversion のサーバを移行した。 新しいサーバから全プロジェクトをチェックアウトし直すのは面倒だし時間がかかるので、svn switch でリポジトリの移動をすることに。 異なるサーバ間のワーキングコピー移動は svn switch に --relocate オプションを指定する必要がある。 ちなみに、Subclipse では --relocate オプションを付ける方法が見つからなかった。

異なるサーバ間のワーキングコピー移動方法

$ cd workspace/MyProject
$ svn switch --relocate https://oldsvn.example.com/repos/MyProject/trunk https://newsvn.example.com/repos/MyProject/trunk

Subclipse が Subvesion ver.1.4 ベースで、コマンドラインの svn が ver.1.5 以上の環境(要は私の環境)では、svn 実行後にワーキングコピーをダウングレードする必要がある。

$ cd workspace
$ ./change-svn-wc-format.py ./MyProject 1.4
詳細は Subversion で削除したファイルをリポジトリから復元する方法と・・・ を参照。

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jan 20, 2009

[Subversion] Subversion で削除したファイルをリポジトリから復元する方法と・・・

Subversion で削除したファイルを復元する方法をメモ。 ついでに復元後に発生した "This client is too old" エラーの対応方法もメモ。

Subversion で削除したファイルを復元する方法

まず、削除したリビジョンを "svn log" で調べる。 下記の例では 10137 が removedfile を削除したリビジョンとなる。

$ svn log --verbose
------------------------------------------------------------------------
r10137 | me | 2009-01-06 10:25:35 +0900 (Thu, 06 Jan 2009) | 1 line
Changed paths:
   M /path/to/my/project/modifiedfile
   D /path/to/my/project/removedfile
   ...
$
10137 が削除したリビジョンであるということは、当然その一つ前の 10136 には removedfile は存在しているということ。 "svn cp" でリビジョン 10136 の removedfile を取得する。
$ svn cp -r 10136 ./removedfile ./removedfile2
A    removedfile2
$

"This client is too old to work with working copy"エラーの対処方法

Eclipse (+ subclipse) で使用しているワーキングコピーに対して上記の作業を行ったら、subclipse で下記のエラーが発生する様になった。

svn: This client is too old to work with working copy '/path/to/my/project'; please get a newer Subversion client
調べてみたら、yummy-yummyさんの「TortoiseSVNでコミットしたあとにSubclipseで同期とるとエラーになるのですが」というエントリに対応方法があった。感謝!
$ wget http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py
$ chmod 755 ./change-svn-wc-format.py
$ ./change-svn-wc-format.py . 1.4
Converted WC at '.' into format 8 for Subversion 1.4
$

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 25, 2008

[Subversion] Subversion の一日分の更新状況をメール通知する

Subversion の一日分の更新情報をメールで送信するシェルスクリプトを載せておく。

#!/bin/sh

REPOS="/my/svn/repos"
TMPFILE="./todayscommit.tmp"
DATE=`date +"%Y-%m-%d"`
DATE2=`date +"%Y/%m/%d"`
SVNLOOK="/usr/bin/svnlook"
YOUNGEST=`$SVNLOOK youngest "$REPOS"`
MAILADDRESS="me@example.com"
MAILSUBJECT="Today's COMMIT $REPOS ($DATE2)"

echo "Today's commit : $DATE2" > $TMPFILE
echo "" >> $TMPFILE

i=$YOUNGEST
while [ $i -ge 0 ];
do
  REVDATE=`$SVNLOOK date -r $i $REPOS | sed -e "s/[[:blank:]].*//g"`
  if [ $REVDATE = $DATE ];
  then
    echo "***** Revision $i ***************************************" >> $TMPFILE
    $SVNLOOK info -r $i $REPOS >> $TMPFILE
  else
    break 1 
  fi
  i=`expr $i - 1`
done

mail -s "$MAILSUBJECT" "$MAILADDRESS" < $TMPFILE

rm $TMPFILE

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 23, 2008

[Subversion] Subversion リポジトリの状態をメール通知する

私の環境で使用している Subversion リポジトリの状態をメールで通知するスクリプトを載せておく。 このスクリプトを cron で一週間に一回実行している。

#!/bin/sh

REPOS="/my/svn/repos"
LOCK="$REPOS/access.lock"
DATE=`date +"%Y/%m/%d %H:%M:%S"`
MAILSUBJECT="Today's SVN $REPOS ($DATE)"
MAILADDRESS="me@example.com"

touch $LOCK

SVNADMIN="/usr/bin/svnadmin"
SVNLOOK="/usr/bin/svnlook"
SVNADMIN_LSLOCKS=`$SVNADMIN lslocks $REPOS`
SVNADMIN_LSTXNS=`$SVNADMIN lstxns $REPOS`
SVNADMIN_VERIFY=`$SVNADMIN verify $REPOS 2>&1`
SVNLOOK_YOUNGEST=`$SVNLOOK youngest $REPOS`
REPOSSIZE=`du -s -k $REPOS | sed -e "s/[[:blank:]].*//"`
STORAGE=`df $REPOS`

mail -s "$MAILSUBJECT" "$MAILADDRESS" << EOF
*** Date ***********************************
$DATE

*** Path of Repository *********************
$REPOS

*** Size of Repository *********************
$REPOSSIZE kb

*** Storage ********************************
$STORAGE

*** Youngest revision **********************
$SVNLOOK_YOUNGEST

*** Locks **********************************
$SVNADMIN_LSLOCKS

*** Transactions ***************************
$SVNADMIN_LSTXNS

*** Verify *********************************
$SVNADMIN_VERIFY

EOF

rm $LOCK
スクリプトから届くメールはこんな感じ。
*** Date ***********************************
2008/10/23 00:00:00

*** Path of Repository *********************
/my/svn/repos

*** Size of Repository *********************
2837148 kb

*** Storage ********************************
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1            12537386   6283742 126324102   3% /

*** Youngest revision **********************
3092

*** Locks **********************************


*** Transactions ***************************
2990-1
3024-1
3024-2

*** Verify *********************************
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.

  (略)

* Verified revision 3090.
* Verified revision 3091.
* Verified revision 3092.

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 22, 2008

[Subversion] Subversion リポジトリに対する commit を禁止する方法

Subversion のメンテナンスについて触れたので、 ついでに Subversion リポジトリのメンテナンスを実施する際に必要な commit 禁止の設定方法を書いておく。 Subversion リポジトリへの commit 禁止はリポジトリフックの start-commit を使用すると簡単に実現できる。

Version Control with Subversion - start-commit Repository Hooks
http://svnbook.red-bean.com/en/1.5/svn.ref.reposhooks.start-commit.html

start-commit フックの作成

Subversin リポジトリホーム($REPOS) に hooks というリポジトリフックをを格納する場所が用意されているので、その中に start-commit というファイルを作成する。 テンプレートが用意されているので、それをコピーしてもいい。 作成後は実行権限とアクセス権限を適切なものに変更すること。

$REPOS/hooks/start-commit

#!/bin/sh

REPOS="$1"
USER="$2"

if [ -e "$REPOS/commit.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi 
exit 0

commit の禁止方法

$REPOS/commit.lock というファイルを作成するとリポジトリに対する全ての commit が禁止される。

$ touch $REPOS/commit.lock
この状態でクライアントから commit を実行すると、クライアント側には "Service temporary unavailable." というメッセージが表示され commit が失敗する。 $REPOS/commit.lock を削除すれば再度 commit が可能になる。

commit 以外の更新処理

私のところでは commit 以外の更新系処理に関しても同様にリポジトリの保守前にアクセス制限をかけている。 それぞれのリポジトリフックは以下の通り。下記のリポジトリフックを使用した場合、

  • $REPOS/access.lock ・・・ commit, revporp, lock, unlock を全て禁止
  • $REPOS/commit.lock ・・・ commit を禁止
  • $REPOS/revporp.lock ・・・ revprop を禁止
  • $REPOS/lock.lock ・・・ lock を禁止
  • $REPOS/unlock.lock ・・・ unlock を禁止
となる。

$REPOS/hooks/start-commit

#!/bin/sh

REPOS="$1"
USER="$2"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/commit.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi 
exit 0

$REPOS/hooks/pre-revprop-change

#!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/revprop.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

if [ "$PROPNAME" = "svn:log" ]; then exit 0; fi
exit 1

$REPOS/hooks/pre-lock

#!/bin/sh

REPOS="$1"
FILE="$2"
USER="$3"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/lock.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

exit 0

$REPOS/hooks/pre-unlock

#!/bin/sh

REPOS="$1"
FILE="$2"
USER="$3"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/unlock.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

exit 0

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 21, 2008

[Subversion] Subversion リポジトリのお掃除

Subversion を長く使っていると、Subversion のトランザクションが走っている状態で Eclipse が落ちたりネットワークが切れたりして、トランザクションが未完の状態で切れてしまうことがある。 こういったトランザクションはクライアントからは分からないが、 サーバ側に「死んだトランザクション」として残っている。 「死んだトランザクション」が残っているからといって別段問題があるわけではないのだけれど、 不要なものがサーバに溜まっていくというのも気持ち悪いので、たまにチェックして要らないものを消している。

svnadmin lstxns
http://subversion.bluegate.org/doc/re40.html
リポジトリのお掃除
http://subversion.bluegate.org/doc/ch05s03.html#svn.reposadmin.maint.cleanup

「死んだトランザクション」の対応方法は以下の通り。

「死んだトランザクション」の確認

「死んだトランザクション」は "svnadmin lstxns" コマンドで確認することができる。 以下では Subversion リポジトリが "/my/svn/repos" にあることを前提とする。

まずは「死んだトランザクション」の一覧を取得する。

$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
5676-1
$
次に「死んだトランザクション」の内容を確認して削除しても良いものであるか否かを判断する。
$ svnlook info /my/svn/repos --transaction 7867-1
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
$
死んだトランザクションを一つずつ確認していくのが面倒なので、普通は for で一気に表示する。
$ for i in `svnadmin lstxns /my/svn/repos`; do echo "*** $i"; svnlook info /my/svn/repos --transaction $i; done
*** 7867-1 
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
*** 5511-1 
colleague
2008-09-04 16:35:53 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5511-2 
colleague
2008-09-04 16:42:18 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5676-1 
me
2008-09-12 14:29:26 +0900 (Fri, 12 Sep 2008)
61
commit comment

「死んだトランザクション」の削除

削除しても良い「死んだトランザクション」があったら、"svnadmin rmtxns" コマンドで削除する。 "svnadmin rmtxns" を実行する前に Subversion リポジトリに対する外部からのアクセスを禁止しておくこと。

# svnadmin rmtxns /my/svn/repos 5676-1
Transaction '5676-1' removed.
#
"svnadmin rmtxns" コマンドが正常終了したら、本当に削除されたか確認しておく。
$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
$

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 26, 2007

[Subversion] Subversion と Trac の連携にチャレンジ (2)

Subversion の Issue Tracker 連携機能は便利なのだけれど、ディレクトリ毎にいくつものプロパティを設定しなければいけないという面倒さがある。 auto-props を使用できれば良いのだが、auto-props は残念なことにファイル専用でディレクトリには適用されない。 ディレクトリを作成する度にプロパティを手動で設定するのは馬鹿らしいので、自動化を考えてみた。

自動化の方法

auto-props
ディレクトリには auto-props は適用されない。不可能。
svn propset を CRON で実行。
ディレクトリ作成直後に連携機能が使用できない。さすがに /etc/cron.minutely というのは無いし。
pre-commit hook を利用
pre-commit で svn co、svn propset、svn commit を実施するとコンフリクトが発生して元の svn commit が失敗してしまう。NG。ちなみに、svn propset は working copy が無いと動作しないので、面倒でも一度 svn co しないと propset できない(Subversion subversion Issue 2238 で議論されている)。ちなみに、proplist や propget は working copy 無しでも実行できる。
post-commit hook を利用
これが唯一の方法?? post-commit で svn co、svn propset、svn commit を行う。パフォーマンス的には問題だが、所詮個人用途のサーバだから大丈夫だろう。

post-commit で bugtraq プロパティ追加の自動化

/var/svn/hooks/post-commit

というわけで、post-commit 用のスクリプトを作成してみた。 善し悪しは別として、bugtraq:url プロパティが設定されていないディレクトリ(もしくはその直下のファイル)が commit された際に自動的に bugtraq 関連のプロパティをセットする。 ユーザ情報を埋め込まないと行けないのが難と言えば難だが、他に方法が無かったので必要悪ということで諦めた。 ちょっとややこしくなってしまったが、結果的に期待通りの動作が得られたので良しとする。

# cat /var/svn/hooks/post-commit
#!/bin/sh
# POST-COMMIT HOOK

BUGTRAQ_PROPS=/var/svn/bugtraq_props.conf
TMP_DIR=/var/tmp/svn
SVN_REPOSITORY=file:///var/svn/
SVN_USER=me
SVN_PASSWORD=mypassword
SVNLOOK=/usr/bin/svnlook
SVN=/usr/bin/svn
REPOS="$1"
REV="$2"

#-----------------------------------------------------------------
# propset bugtraq conrigurations to directories
#-----------------------------------------------------------------
configureBugtraqProps() {

  #---------------------------------------------------------------
  # load configuration for bugtraq.
  # if configuration file does not exist, do nothing.
  #---------------------------------------------------------------
  test -x $BUGTRAQ_PROPS || return
  . $BUGTRAQ_PROPS
  CHANGED_DIRS="$1"
  for i in $CHANGED_DIRS;
  do

    #-------------------------------------------------------------
    # if "bugtraq:url" prop is not set, assume that this directory
    # has no bagtraq configuration
    #-------------------------------------------------------------
    BUGTRAQ_URL=`$SVNLOOK propget -r "$REV" "$REPOS" "bugtraq:url" "$i"`
    if [ "$BUGTRAQ_URL" == "" ]
    then

      #-----------------------------------------------------------
      # unfortunately, svn propset command needs working copy of repository.
      # so, checkout target directory to temporary working copy
      #-----------------------------------------------------------
      rm -rf $TMP_DIR
      mkdir $TMP_DIR
      cd $TMP_DIR
      $SVN checkout "$SVN_REPOSITORY$i" --non-recursive -r HEAD --username "$SVN_USER" --password "$SVN_PASSWORD" --non-interactive

      #-----------------------------------------------------------
      # propset to target directory
      #-----------------------------------------------------------
      $SVN propset "bugtraq:url" "$bugtraq_url" `ls $TMP_DIR`
      $SVN propset "bugtraq:label" "$bugtraq_label" `ls $TMP_DIR`
      $SVN propset "bugtraq:message" "$bugtraq_message" `ls $TMP_DIR`
      $SVN propset "bugtraq:warnifnoissue" "$bugtraq_warnifnoissue" `ls $TMP_DIR`
      $SVN propset "bugtraq:number" "$bugtraq_number" `ls $TMP_DIR`
      $SVN propset "bugtraq:append" "$bugtraq_append" `ls $TMP_DIR`
      $SVN propset "bugtraq:logregex" "$bugtraq_logregex" `ls $TMP_DIR`

      #-----------------------------------------------------------
      # commit prop changes
      #-----------------------------------------------------------
      $SVN commit `ls $TMP_DIR` --username "$SVN_USER" --password "$SVN_PASSWORD" --message "set bugtraq props"

      #-----------------------------------------------------------
      # clean up temporary working copy
      #-----------------------------------------------------------
      rm -rf $TMP_DIR
    fi
  done
}

CHANGED_DIRS=`$SVNLOOK dirs-changed -r "$REV" "$REPOS"`
configureBugtraqProps "$CHANGED_DIRS"
exit 0

/var/svn/bugtraq_props.conf

この設定は環境に併せて適宜変更する必要がある。

# cat /var/svn/bugtraq_props.conf
bugtraq_url=https://www.example.com/trac/ticket/%BUGID%
bugtraq_label="Ticket ID"
bugtraq_message="#%BUGID%"
bugtraq_warnifnoissue=false
bugtraq_number=true
bugtraq_append=false
bugtraq_logregex="#?(\d+)"

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 25, 2007

[Subversion] Subversion と Trac の連携にチャレンジ (1)

Subversion には、クライアントプログラム用に "bugtraq" で始まるプロパティが規定されている。 このプロパティが指定されているディレクトリはバグトラッキングシステムとの連携機能が特別に用意される(大抵のクライアントで)。 というわけで、Subversion と Trac を連携させてみた。

Issue Tracker Integration
http://svn.collab.net/subclipse/help/topic/org.tigris.subversion.subclipse.doc/html/reference/issuetracker.html
Integration of Subversion (GUI) clients with Bug Tracking Tools
http://guest:guest@tortoisesvn.tigris.org/svn/tortoisesvn/trunk/doc/issuetrackers.txt

設定したプロパティ

設定するのはディレクトリのみで OK。 TortoiseSVN を使用すると再帰的に設定を行ってくれるので便利。

bugtraq_url https://www.example.com/trac/ticket/%BUGID% Issue Tracker の URL。"%BUGID%"という文字列がコミット時に入力された Issue ID に自動的に置換される。
bugtraq_label "Ticket ID" Subversion クライアントに表示される ID 用のラベル。Trac の場合は Bug も Issue も Ticket と呼ばれているので Ticket ID にしている。
bugtraq_message "#%BUGID%" コミット時、コメントに自動的に追記されるメッセージ。
bugtraq_warnifnoissue false コミット時に Issue ID が指定されなかった場合に警告をするか否か。個人的にコード以外の情報も Subversion で管理しているので false にしているが、開発用リソースのみが格納されているディレクトリの場合は true の方が良いかもしれない。
bugtraq_number true Issue ID が数値かどうか。Issue ID が Subversion クライアントに入力された際、クライアントが Issue ID をバリデーションしてくれる。
bugtraq_append false bugtraq_message で指定したメッセージを、ユーザが入力したコメントの「前」に追記するか「後」に追記するかを指定する。false の時に前になる。
bugtraq_logregex "#?(\d+)" Issue ID の正規表現。Issue ID が Subversion クライアントに入力された際、クライアントが Issue ID をバリデーションしてくれる。

TortoiseSVN のコミット画面の変化

設定前 設定後
[TortoiseSVN設定前] [TortoiseSVN設定後]

Subclipse のコミット画面の変化

設定前 設定後
[Subclipse設定前] [Subclipse設定後]

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 21, 2006

[Subversion] CentOS 4.x に Subversion をインストールする方法

CentOS 4.x に Subversion をインストールしたときのメモ。 apt の代わりに yum を使用するだけで、基本的には Debian と同じ。

Subversion のインストール手順

インストール先 CentOS のバージョンは以下の通り。

# cat /etc/redhat-release
CentOS release 4.2 (Final)
インストール作業自体は yum を使用するだけで完了する。
# yum install subversion

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 subversion              i386       1.1.4-2.ent      base              1.6 M
Installing for dependencies:
 neon                    i386       0.24.7-4         base               86 k
Apache2 と連携するために mod_dav_svn もインストールしておく。
# yum install mod_dav_svn
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 mod_dav_svn             i386       1.1.4-2.ent      base               50 k
後は Subversion の設定ファイルを適当にいじれば OK。 設定ファイルは Debian とは異なり /etc/httpd/conf.d/subversion.conf にある。

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Mar 24, 2006

[Subversion] FSFS の発音

Subversion のドキュメントを眺めていて面白い記述を発見した。

Jack Repenning が何も文句を言わないのなら「fuzz-fuzz」と発音することになっています
というわけで、FSFS は「ふぁずふぁず」と発音するらしい。 知らなかった。 ・・・日本国内で「ふぁずふぁず」と発音しても通じないだろうな。

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Mar 23, 2006

[Subversion] Subversion のリポジトリ破損

Subversion のリポジトリ(FSFS)が破損した。 Commit は出来るのだが、Update や Log を実行すると

REPORT request failed on '/repository/!svn/vcc/default'
REPORT of '/repository/!svn/vcc/default': 200 OK
というエラーが発生して処理が中断してしまう。 TortoiseSVN でも Subclipse でも発生したので、サーバ側の問題の模様。

原因

原因はリビジョンファイルの破損。 HDD のセクタが破損したことで $SVN_HOME/svndb/db/revs/ の中にある特定のファイルにアクセスできなくなっていた。 壊れていたリビジョンは最新のものではなく、少し古い(数日前)のものだった。 "svnadmin verify" コマンドでリビジョンの状態をチェックできる。

# svnadmin verify /home/svn/svndb/
         (SNIP)
* Verified ▒・▒吾с??222▒
* Verified ▒・▒吾с??223▒
* Verified ▒・▒吾с??224▒
* Verified ▒・▒吾с??225▒
* Verified ▒・▒吾с??226▒
* Verified ▒・▒吾с??227▒
* Verified ▒・▒吾с??228▒
svn: Can't read file '/home/svn/svndb/db/revs/229': 入力/出力エラーです
#
コマンドの実行結果が文字化けしているのはご愛敬といったところか・・・。

対処方法

今回は破損したリビジョンが数日前と比較的最近のものだったので、破損したリビジョンの一つ前の状態に戻すことにした。 手順は以下の通り。

  1. $SVN_HOME/svndb/db/revs から破損したリビジョン以降のリビジョンファイルを削除
  2. $SVN_HOME/svndb/db/revprops から↑で削除したものと同じ名前のファイルを削除
  3. $SVN?HOME/svndb/db/current を編集して、現在のリビジョンを削除後の最新リビジョンに変更

備考

破損したリビジョンだけを無かったことに出来ないか、と思い色々調べてみたがどうも難しそう。 Subversion では各リビジョンはファイルの差分情報しか持っていない。 そのため、破損したリビジョンで変更が加えられているファイルがその後のリビジョンでも変更されていると、破損したリビジョンを削除することは出来ない。 ツールなどでも復旧は出来ないようだ。 リビジョンファイルを一つずつ手で修正すれば良いのかもしれないが、膨大な量の修正が必要になることとバイナリファイルを修正するという 2 点から容易な作業ではない。 バックアップはお早めに、といったところか。

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Mar 05, 2006

[Subversion] Subversion 管理用ディレクトリの ".svn" と "_svn"

Subversion 管理下のファイルをチェックアウトすると、管理用ディレクトリとして ".svn" が作成される。 それが、TortoiseSVN をバージョンアップした途端に "_svn" に変わってしまったという話を聞いた。 となると、TortoiseSVN をバージョンアップするわけにいかなくなってしまうので原因を調べてみた。 原因は Subversion 1.3 のリリースノートに記載されていた。

The "_svn" hack is now officially supported: since some versions of ASP.NET don't allow directories beginning with dot (e.g., ".svn", the standard Subversion working copy administrative directory), the svn command line client and svnversion now treat the environment variable SVN_ASP_DOT_NET_HACK specially on Windows. If this variable is set (to any value), they will use "_svn" instead of ".svn". We recommend that all Subversion clients running on Windows take advantage of this behaviour. Note that once the environment variable is set, working copies with standard ".svn" directories will stop working, and will need to be re-checked-out to get "_svn" instead.

".svn" が "_svn" に変わった環境で環境変数を調べてみてもらったところ、SVN_ASP_DOT_NET_HACK=1 となっていた。 結局、SVN_ASP_DOT_NET_HACK を設定しなければ今まで通り ".svn" のママだということが分かった。 TortoiseSVN をバージョンアップしても問題は無さそうということで一安心。

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 12, 2005

[Subversion] Subversion メモ

Subversion を導入して結構経つが、きちんとドキュメントを読んだことが無い。 一度読んでおかないと、ということでメモ。

Subversion 公式サイト
http://subversion.tigris.org/
Subversion によるバージョン管理
http://subversion.bluegate.org/doc/book.html
Subversionの基礎練習
http://www.hyuki.com/techinfo/svninit.html
TortoiseSVN
http://tortoisesvn.tigris.org/
Subclipse
http://subclipse.tigris.org/

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |