LinuxでSubVersionを構築しEclipse Subversive から使うでSubVersionの構築方法とEclipseを使ったクライアントアクセスの方法を書きました。
今回は、クライアントとしてTortoiseSVNを使ってみました。
TortoiseSVN は WindowsExplorer に統合されてるようです。
ダウンロードは、TortoiseSVN公式サイト から可能です。Language packsもダウンロードしておきましょう。
TortoiseSVNインストール後に再起動が要求されるので注意です。
スタートメニュー→TortoiseSVN→Seettingsから設定画面を開きます。
Language packsをインストールしていれば、GeneralのLanguageから日本語が選択できます。
リポジトリ用のフォルダを作成し、右クリック→TortoiseSVN→リポジトリブラウザ
URL入れる画面開くので、リポジトリのパスを入力して開ければOKです。
リポジトリパス: http://testsv/svn/test/
・リポジトリの構成
TortoiseSVNとは関係ないSubVersionサーバ側のリポジトリの構成ですが、下記ディレクトリを作成してメインやタグ、ブランチに分けることが推奨されているようです。
trunk : 開発の主系。普段はここに対してコミットや更新をする。
tags : タグ。VisualSourceSafeでいうところのラベル。
branches : ブランチ。つまり枝分かれプロジェクト。
さらに複数のプロジェクトがあるなら、それもディレクトリで分ける必要があり、いろいろなリポジトリの構成が出てくるようですね。
それについては、Subversionのリポジトリ構成 - watawata日記が参考になります。
・リビジョン
これもTortoiseSVNとは関係なく、SubVersion自体の仕様なのですが、リビジョンは個々のファイルにつくのではなく、ツリー全体につくようです。(つまり、全ファイルに同じリビジョン)
CVSとかでは各ファイルにリビジョンがついていたので間違えないようにしないといけませんね。
・リポジトリ内の確認
リポジトリの中身を確認したいときはリポジトリブラウザが使えます。
適当なフォルダのコンテキストメニュー→TortoiseSVN→リポジトリブラウザ から起動できます。
リポジトリブラウザ内の各ファイルのコンテキストメニューからファイルの履歴も確認することができます。
・リポジトリデータの取得
最初にリポジトリのデータを取得するには、ローカルにフォルダ作成し、コンテキストメニュー→SVN チェックアウト でOKです。
これでそのフォルダがSubVersionのリポジトリ編集用フォルダになります。
次回からは コンテキストメニュー→SVN更新 でリポジトリ上のデータを取得できます。
注意として、この時ローカルのファイルがリポジトリと異なっている場合(アイコンが!)、更新時に自動マージ、もしくは競合が発生します。
・リポジトリにファイルやフォルダを追加する
リポジトリに新たにファイルを追加するには、追加するファイルをローカルで作成したのち、追加したいファイルを選択してコンテキストメニューから TortoiseSVN → 追加 で可能です。
追加後はコミットを忘れずに。
・ローカルで加えた変更をリポジトリに保存する
チェックアウトしたファイルに変更を加えた後、変更したファイルをリポジトリに保存するには、コミット を実行します。
コミットは、変更が加えられたファイルを含むフォルダでショートカットメニューから SVNコミット → メモを入力しコミットするファイルをチェック後、OK をクリックするとコミットされます。
・ファイル名の変更
CVSとの違いの大きな利点として、ファイル名やフォルダ名を変更でき、名称変更前の履歴も保持できるという点があります。
ファイル名の変更は、コンテキストメニュー→TortoiseSVN→名前の変更 で行い、コミットします。
・削除
リポジトリからファイル・フォルダを削除する場合は、コンテキストメニュー→TortoiseSVN→削除 で、コミットします。
・タグを付ける
trunkフォルダのコンテキストメニュー→TortoiseSVN→ブランチ/タグ で 先URL にタグとどのリビジョンか分かるように入力します。
例:http://sv/svn/test/testprj/tags/ver1.0
タグ付は、サーバ上の内部処理としては指定したリビジョンのハードリンクを作っているだけらしいですね。
・コミット時のエラー
例えば下記のような場合だと、コミット時に「コミットに失敗しました。ファイルまたはディレクトリ'xxx'はリポジトリ側と比べて古くなっています。updateを実行してみてください」とエラーになります。
その場合、コンテキストメニュー→SVN更新 でリポジトリのデータをローカルを更新します。
その際、リポジトリの最新リビジョンとローカルの変更済みファイルとで、違う行の変更(テキストファイルのみ)の場合自動的にマージされます。
同じ行の変更もしくはバイナリファイルで変更があった場合は、競合となります。
競合の場合、ローカルのベースリビジョンのファイル(ファイル名:filename.ext.rOLDREV)と、リポジトリの最新リビジョンのファイル(ファイル名:filename.ext.rNEWREV)が作成されます。
競合ファイル自身は、%lt;%lt;%lt;%lt;%lt;%lt;%lt; と >>>>>>> との間でどのような変更があったか表示してくれます。
競合の場合は、手動で競合を解決しないといけません。
その時、競合ファイルのコンテキストメニュー→競合の編集 も使えますしテキストエディタで直に修正しても構いません。
いずれにせよ、競合の修正が手動で直せたら、コンテキストメニュー→競合の解消 をします。
(注意として、競合の解消が、実際に競合をマージ等で自動的に解消するわけではありません。変更をコミットできるよう、filename.ext.mine ファイルや filename.ext.r* ファイルを削除するだけです)
これでコミットをします。
流れとしては下記のような感じでしょうか。
TortoiseSVNはWindowsエクスプローラのコンポーネントとして動いているので、Explorerの列で下記列を表示するようにすると便利です。
SVN状態:ファイルの状態。つまりアイコンの意味。
SVNリビジョン:ローカルで編集元のリビジョン。
SVNローカルのロック保持者:ロックしているユーザ
SVN作者:更新ユーザ
TortoiseSVNのコンテキストメニューには差分に関するいくつかのメニューがありますがそれらの意味は下記のようです。
・差分
自身が直近でリポジトリから取得したリビジョンと、現在のデータの差分を表示します。
・以前のバージョンとの差分
自身が直近でリポジトリから取得した一つ前のリビジョンと、現在のデータの差分を表示します。
・変更をチェック
そのまま開いた画面でダブルクリックすると、「差分」と同じ意味のようです。
「リポジトリをチェック」ボタンを押下すると、リポジトリと今作業中のファイルとの差分を見れます。
TortoiseSVNの差分ツールでうれしいのは、一部のバイナリファイル(画像ファイル、MS Office(Word,Excel),OpenOfffice(Writer,Calcのみ。Draw,ImpressはNG))の差分も見れるようしてくれてることです。。
・ロック(排他制御)モードと、マージ(統合モード)
SubVersionは基本的にはマージモードで動かすことが推奨されてますが、ロック機能もあるようです。
コンテキストメニュー→TortoiseSVN→ロックを取得 でロックできます。ロックした人以外はコミットできません。
ロックモードで運用する場合は、Subversion の属性で svn:needs-lock を使用するといいようです。これをするとロック取得しない限りチェックアウトや更新時にファイルが読み取り専用になります。VisualSourceSafeのような動きになるようですね。
svn:needs-lockを使用する方法については、こちらが参考になります。
詳しくは下記サイトが参照になります。(TortoiseSVN以外にもSubVersionの基本概念サイトや競合サイトも含みます)
TortoiseSVN TortoiseSVNのリファレンスです。ここを見るのが一番いいかと思います。
svn commitで「リポジトリ側と比べて古くなっています」
CVS/Subversionを使ったバージョン管理(後編:SVNを使ったバージョン管理) - SourceForge.JP Magazine
Subversion 競合発生時の正しい対処 - 130単位
Subversion(TortoiseSVN)でマージする方法(手順)(1) branchからtrunkにマージする方法です。