« 新年早々余裕なし…9時間の残業…。 | トップページ | 今日の日記:眼科検診。 »

2009年1月10日 (土)

[IT覚書][subversion]業務で大量のファイルを扱うときはやっぱりコマンドラインだね。

 どうしてもGUIの方がとっつき易い。それはそうだろう。僕もたとえばSVN(subversion)を業務で使い始めたときは、クライアント側では TortoiseSVN を使っていろいろと感触をつかんだ。TortoiseSVN は Subversion 本家との互換性がとても高く、Subversion のクライアント側の機能のほぼすべてを GUI で実行できる。
 もともと Subversion 自身が、サーバ機能とクライアント機能の両方を兼ね備えていることもあり、TortoiseSVN だけでも、ローカル環境に限定するなら、リポジトリの構築もできる。これはつまり、バックアップソフトとして Subversion を個人環境で使いたいといった場合には、TortoiseSVN だけですべて足りるということである。

 …。

 一方で、僕は業務システム開発の現場で、Subversion を使っている。ドキュメントサーバ(Windows Server 2003 R2 サーバ)に、Subversion 1.4.5 を導入している。そしてネットワーク上の共用フォルダに「作業コピー」を配置することで、複数のライブラリアンによるチェックができるようにしている。まだまだ運用は常に継続的改善中だけれど。

 「バージョン管理システムを導入しさえすればライブラリアンが必要なくなる」といった意見をよく耳にするけれど、それは絵空事だと思う。バージョン管理システムはあくまでも道具に過ぎず、ライブラリアンの仕事の効率化に一役買ってくれることは事実だけれど、そんなに言われるほど作業量を激減できるわけでもない。ライブラリアンはバージョン管理システムの仕様を踏まえ、相性の良い運用を行わなければならない。そう。バージョン管理システムの仕様をしっかりと押さえた上で運用しないとかえって作業量が増えることもある。

 …。

 現時点での最新バージョンは、1.5.4 あたりのはずだけれど、このバージョンでも「タイムスタンプの保持」の問題は解決されていない。バージョン管理とは一種の文化だから、仕方がないのかもしれない。SVNを開発している人たちの頭の中には「タイムスタンプを固定してしまうと、それはけっこう前の日時情報を持つことになるので、タイムスタンプの更新をビルドのトリガーにしているようなプロジェクトでは、とても危険な行為じゃないか」…という考えがあるんだろう。

 しかし、僕の所属している(もしくはしてきた)プロジェクトの文化では、内容的に何にも変わっていないファイルのタイムスタンプが、チェックアウトされただけで変更されてしまうことに、逆にものすごい違和感を感じるんだ。つまり、バージョン管理システムにはいっさいファイルが持っているタイムスタンプをいじってほしくないのだ。タイムスタンプを変更するのは「そのファイルを実際に開いて保存した人」だけにしたいのだ。

 今後、現行システムの保守をやっているチームにもSVNを知ってもらい、使ってもらう必要があるけれど、このタイムスタンプ問題は、必ず問題視されるだろう…。

 …。

 現時点で、その問題を少しでも軽減しようと思うなら、「ファイルの日付を"最後にコミットした日付"に設定する」というオプションを使うことくらいしかない。Subversion,TortoiseSVN ともに初期設定ではオフになっているオプションだ。

 TortoiseSVN では「設定」画面でそのオプションのオン/オフを設定できる。それでは、コマンドライン版の Subversion ではどうするのか。けっこう悩んだけれど、クライアント側の設定ファイルを書き換えることで同じことができるのがわかった。

 WindowsXP であれば、下記の位置に設定ファイルが作られている。(隠しフォルダなのでエクスプローラの表示設定を変える必要がある)

 C:\Documents and Settings\
  [USERNAME]\Application Data\
  Subversion

 ここに、config という拡張子もないテキストファイルがある。この内容を編集する。

# use-commit-times = yes

 という行がある。これは先頭に「#」がついてコメント行扱いになっている。これを有効化する。

use-commit-times = yes

 ここでの注意点は、行頭にスペースを入れないことである。

 …。

 ついでに、同ファイル内に、editor-cmd 行も有効化/修正しておけば、コマンドライン版 Subversion からリポジトリにメッセージログをスクリーンエディタで編集することができる。

editor-cmd = %SystemRoot%\system32\notepad.exe

 こうすれば「メモ帳」が登録される。
 注意点は、同じく行頭にスペースを入れないことである。

 …。

 使い方にもよるけれど、たいていの小規模なコミット(チェックイン)ならば、TortoiseSVN のGUIでやった方が良いだろう。でも、大規模な開発プロジェクトにおいて、ものすごく大量のファイルをコミットする場合、作業の証跡を残すと言う意味でも、コマンドライン版を使用して、確実にログを取ることが望ましい。

 ここで誤解しないでほしいことは、コマンドライン版 Subversion に特殊なロギング機能があるわけではないということ。もしそんな機能があったならば、GUI版の TortoiseSVN にも実装されていたはずだ。

 コマンドラインでは、普通に標準出力(またはエラー出力)をリダイレクトできるというだけである。

 変更をチェック(svn status)の場合なら

svn stat [パス名] >> [ログファイル] 2>&1

 …という感じで。

 …。

 それにしても、最近の人たちはコマンドライン操作に、本当に慣れていない。これも Windows がもたらしたものだろう。
 Unix/Linux 環境のファイルを操作するのに、FFFTP (ftpクライアントのGUIソフト:優れたフリーソフトだ) で、それをあたかもファイルエクスプローラみたいな使い方をしているんだもの。
 その使い方はどうなんだ?

 まあ、これはおじさんの愚痴だな。

|

« 新年早々余裕なし…9時間の残業…。 | トップページ | 今日の日記:眼科検診。 »

コメント

SVN捨てたいおやじはここにも
⊃д`)

投稿: えるも | 2012年2月 7日 (火) 17時01分

コメントを書く



(ウェブ上には掲載しません)




« 新年早々余裕なし…9時間の残業…。 | トップページ | 今日の日記:眼科検診。 »