特徴

よく使うコマンド

svnからとってくる

svn co リポジトリへのパス--depth=immediates or infinity
svn checkout -r 2 リポジトリへのパス

今のリポジトリ状態をチェック

svn st

追加や修正のあったファイルの状態を表示できる。

リポジトリを最新化

svn up

コミット

svn commit もしくは svn ci

変更の取り消し

svn revert
merge --depth=infinity -r取り消したいリビジョン番号:左より-1のリビジョン リポジトリURL 適用するチェックアウトディレクトリー

ログを見る

svn log --revision リビジョン番号 リポジトリURL
svn log -r リビジョン番号 -v

ファイルに保存された認証情報を消す

rm -rf ~/.subversion/auth/svn.simple/*

他のプロジェクトのソースを参照する(externals)

シンボリックリンクのようなもの。メインは別のリポジトリで開発していてそこを参照したい場合に設定する。参照オンリーではなくコミットまで出来てしまう点は注意。以前はフォルダ単位でしかできなかったが、1.6以降ファイル単位も可能になった。

TortoiseSVN設定

属性の設定を選んで、属性名はsvn:externalsを選ぶ。

設定値はファイル単位で記述、絶対パスでも可能

../../../../../../../404.html 404.html
../../../../../../../500.html 500.html

マージ

よく混乱してしまうのがマージである。基本的にブランチで枝分かれしない限りは必要ないのだが。

マージの方法

  1. マージ先のプロジェクトをチェックアウト(マージ元はリポジトリから取得するのでチェックアウトが不要)
  2. マージしたい変更のリビジョンのみを指定して、マージ実行
  3. 変更点を確認するのと、merge-infoプロパティに指定したリビジョンが追加されていることを確認してコミット
cd マージされる側のワーキングコピー
svn merge -c 305212,305357,305716,305867,305962,306151,306370 http://host/マージ取得元のURL

TIPS

サーバー移転

サーバの情報が記述されているメタ情報(.svn)を書き換える必要がある。通常はsvnのコマンドで行う。GUI使ったほうが楽かも

svn switch --relocate

ローカルチェックアウトディレクトリ移転

これはトップレベルフォルダを移動するだけで良い。一旦チェックアウト後そのディレクトリをプログラム実行場所まで移動してもメタ情報は相対パスで記述されているので大丈夫

リビジョン間の差分をチェック

リポジトリ同士の比較

svn diff リポジトリ1URL@1000 リポジトリ2URL@head 
svn -r 1000:2000 リポジトリ1URL

最後に--summarizeをつけるとファイルの出力のみとなる

チェックアウトディレクトリとリポジトリの差分をチェック 基本

svn diff -r77771:head [ワーキングディレクトリ名]

移動しない場合は引数で指定可能

共通ファイル名だけを抽出する

--summarizeオプションを付けるとファイル名のみ出力
svn diff -r77771:head --summarize [ワーキングディレクトリ名]

設定など

Apacheと連携して使う

yum install mod_dav_svn.
<Location /mysvn>
 DAV svn
 SVNParentPath "/home/svn"
 SVNListParentPath on
 deny from all
 allow from xxx.xxx.xxx.xxx
 AuthType Basic
 AuthName "Rutake Repository"
 AuthUserFile /etc/httpd/conf/.htpasswd
 Require valid-user
</Location>

認証情報のおき場所

Unix 系システムでは~/.subversion/auth/、 Windows であれば %APPDATA%/Subversion/auth/

一度認証に成功するとそのID/PASSWORS情報がキャッシュされる。別のユーザでコミットしたい場合はそのファイルを消さないと前回成功したユーザIDでコミットされてしまう。

コマンドラインオプション中で--username または--passwordを指定するとそちらが優先して利用される。

ネットワーク越しの利用

httpを使わない場合はsvnプロトコルを利用するのがシンプル。ローカルマシン以外はデーモン起動する必要がある。

デーモンとして起動(3690ポートを利用)

svnserve -d -r リポジトリへのパス

/etc/rc.d/rc.localにでも記述しておけば自動起動になる。

xined経由で起動(安全)

参考URL

# vi /etc/services
svnserve        3690/tcp                        # Subversion
svnserve        3690/udp                        # Subversion
# vi /etc/xined.d/svnserve
service svnserve
{
   disable = no
   socket_type = stream
   protocol = tcp
   wait = no
   user = root
   server = /usr/local/bin/svnserve
   server_args = -i
}
# chkconfig --add svnserve
# /etc/init.d/xinetd restart

Windowsから利用する

TortoiseSVNの使い方

エクスプローラーの拡張シェルとしてインストールされる。開発も活発なのでこれを選択しておけば安心。日本語パッケージをインストールしないとコミットコメントに日本語が使えないので注意。

TSVNCache.exeが重い時

デフォルトでは全てのドライブの更新を監視しているため、そりゃー重いだろう。設定でアイコンオーバーレイを無効にするか、監視ドライブを限定すること。

Can't convert string from native encoding to 'UTF-8'

ターミナルのセッティングが英語で日本語を含むものを落とす時に発生する。

Subclipseの使い方

こちらはEclipseプラグイン。

コマンドラインで使う

リポジトリ一覧見る

svn list svn://ホスト名/svn/repos

デフォルトの書き込み制限解除

リポジトリのルートのconf以下のファイルを変更
[general]
password-db = passwd
[general]
anon-access = write
auth-access = write
認証に関しての情報が少なすぎ!!!
httpの場合はmod_svn_authzというモジュールを組み込まないと素通りできる

BACKUP&RECOVERY

svnadmin dump /usr/local/takeru > takeru.out
#一気に圧縮する
svnadmin dump /usr/local/takeru | gzip > takeru.out.gz
mkdir -p /usr/local/takeru_from_backup
svnadmin create /usr/local/takeru_from_backup
svnadmin load /usr/local/takeru_from_backup < takeru.out
SVNROOT/confディレクトリ以下をごっそりコピーすればよい。
svnadmin dump /home/svn/repos | svndumpfilter exclude 除外したいパス(/GPS) > /var/tmp/svnbackup
svnadmin dump /home/svn/repos >  svn_rep_backup_`date +%Y%m%d`

自宅サーバでの移行作業記録

svnadmin dump /home/svn/repos > /var/tmp/repos.out
# 圧縮してもOK
svnadmin dump /home/svn/repos | gzip > /var/tmp/repos.out.gz
mkdir -p /home/svn/repos
svnadmin create /home/svn/repos/

ここまではリポジトリ作成と同じ手順

svnadmin load /home/svn/repos < /var/tmp/repos.out

流し込むのでそれなりに時間がかかる

コマンド一覧

リポジトリは/svn/repos

リポジトリ初期化(ディレクトリは作成しておく)svnadmin create /svn/repos/
リポジトリを見るsvn list file:///svn/repos
インポートsvn import [ローカルdir] http://localhost/svn/repos/[リポジトリdir]
ローカルでインポートsvn import file:///svn/repos/newrepos
チェックアウト(通信方式(file,svn,http)が.svn/entriesにかかれる)svn co file:///svn/repos
diffチェックsvn diff [ファイル名]
ブランチ、トランク間のdiffsvn diff url@HEAD url@HEADgrep "+++"
プロンプトを出さない(マージの時に衝突のプロンプトを無視したいとか)--non-interactive

ブランチ作成

タグもコピー先のディレクトリがtags以下にするという慣例を除けばコマンド自体は一緒。

svn copy http://example.com/svn/trunk http://example.com/svn/branch/new

ブランチ分かれてからのログ取得

svn log --stop-on-copy [url]

用語集

trunkメインとなるリポジトリ
branchtrunkから枝分かれしたもの(branchは枝の意味)
tagある時点のソースに名前を付けてスナップショットにできる。subversionではtagに対してもコミットできてしまうのであるが、そういう運用はしないこと!
commitローカルにある変更をリポジトリに反映すること

WebUI

ViewVCというのがある。

インストール

RPMインストールでさまざまな依存関係があるので公式サイトからごっそり関連RPMを持ってくるとよい。DebianやVineならaptが使えるので非常に楽

バイナリからインストール(推奨)

下記ソースインストールは2004年の情報で今はバイナリがあることがほとんどなのでこちらを推奨する。

ソースインストール(非推奨)

RedHatES3GUIインストールサーバータイプで開発ツールのみ選択した。

db

# cd biuld_unix
# ../dist/configure

apache

# ./configure --enable-mods-shared=all --enable-shared=yes --with-berkeley-db=/usr/local/BerkeleyDB.4.2

subversion

# ./configure --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-berkeley-db=/usr/local/BerkeleyDB.4.2
ですべて問題なく。

外部リンク情報

http://c-brains.jp/blog/wsg/09/11/17-143618.php

Subclipseでのトラブルシューティング

[working copy at a single revision]とでて何も出てこない。

 →ワーキングディレクトリを更新すればよい

Counter: 18548, today: 1, yesterday: 2

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS