2010/08/01

一人で開発しているSVNリポジトリで必要な操作

subversionを使う場合は、一応標準的な使い方としてトップディレクトリに trunk , tags , branches のディレクトリを配置する使い方が良く説明されています。

とはいえ、実際にはただのディレクトリなので、いきなりトップレベルにmain.cppやらのファイルを作成することもありました。

そんな風に開始したプロジェクトが案外規模が膨らんできたので、リリース毎にコードをまとめたいと思い、 trunktags ディレクトリをトップレベルに作成することにしました。

trunk, tagsディレクトリの追加

トップディレクトリで開発をしている場合には、後からsvn copyを使ってプロジェクト全体のコピーを作る事が難しくなります。

svn copyを実行して出来るものはただのディレクトリなので、サブディレクトリに含める事もできますが、いたずらにコードサイズが増えることになるのと、管理単位として性質の違うものが同居するのは避けたいところです。

既存ファイルのtrunkディレクトリへの集約

まずは全てのファイルをSVNの管理下に置き、コミットしておきます。

必要であれば後述するignoreプロパティを適切に設定して、svn statusを実行して何も表示されない状態にしてから作業を開始します。

$ mkdir trunk tags
$ svn add trunk tags
$ svn commit -m 'added directories for version control.' 

次に漏れのないようにtrunk, tags以外のファイル、ディレクトリを trunk ディレクトリに移しました。

$ svn move README.txt *.cpp *.h *.ui *.pro trunk
$ svn commit -m 'Moved all files into the trunk directory.'
タグを付ける

最後にtagsディレクトリに現在の最新版のコピーを作成し、バージョンを付けます。

$ svn copy trunk/. tags/release-0.1a
$ svn commit -m 'Tagging the 0.1a release'

Googleでsvn move(svn mv)コマンドの使い方を調べてみると、URLでリポジトリを指定してサーバ側で作業をする方法が紹介されています。

svn moveコマンドに関しては手元で作業をしてコミットしても、多少の無駄はあるかもしれませんが、問題にはならないのではないでしょうか。

tagsとdiffを取ってみる。

svn diffコマンドを使ってtags/以下の特定のバージョンと、最新版の比較をしようと思った場合には、サーバ側のリポジトリを指定して実行する必要があります。

手元のコードと、過去の特定バージョンとの比較は次のようにします。

$ cd trunk/
$ svn diff --old http://svn.localdomain/svn/proj01/tags/release-0.1/. --new .

ただし、次のコマンドは失敗します。

$ cd trunk/
$ svn diff --old ../tags/release-0.1/. --new .

差分を取るには、過去のある時点のリポジトリをURLベースで指定する事が必要です。

無視するファイルの設定

一律 *~ ファイルを無視するようなルールは、個別に設定する必要がないので ~/.subversion/config ファイルに記述することができます。

~/.subversion/confiファイルへの無視ファイルルールの追加

[miscellany]
global-ignores = *.bak *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.log *.pyc

問題は特定のディレクトリにあるファイルの中で、svnに無視させたいファイルがある場合の設定方法です。

もしファイルが一つであればsvn propsetコマンドを使います。

$ svn propset svn:ignore blog.rnc .
複数ファイルにsvn:ignore属性を追加する

言葉で書くと上のような表記になりますが、正確には「カレントディレクトリのsvn:ignore属性に複数ファイルを追加する」です。

例えば次のようなコマンドは常に最後に実行したファイルだけが優先されます。

$ svn propset svn:ignore blog.rnc .
$ svn propset svn:ignore blog.xsd .

コミットせずに現状を調べてみます。

$ svn status
 M      .
?       blog.rnc

本当はblog.rnc と blog.xsdの2つのファイルを無視したかったのですが、実際に無視されているのは最後のコマンドで指定したblog.xsdのみです。

複数のファイルを設定するには、propeditを使いましょう。

$ svn propedit svn:ignore .

コマンド実行後にエディタが開いた直後の様子

blog.xsd

この状態からファイルを追加して、保存し終了します。

編集後の

blog.xsd
blog.rnc

他にも無視させたいファイルがあれば1行1ファイルのパターンで、どんどん追加していけます。

この状態で先ほどと同じようにして、ちゃんと無視されているかコミット前に確認しておきましょう。

$ svn status
 M      .

けど、ここでviが開いて驚いたりする人っていないんですかね。 自分のスキルに合わせてEDITOR環境変数を適切に設定しておきましょう。

0 件のコメント: