subversionの導入と運用

CVSに代わる新しいバージョン管理システムがsubversionです. Windowsと coLinuxでのファイルの同期を考えていたのですが, それならいっそ... と思 いたち, subversionの導入と相成りました.

emacsとの連携にはpsvnを使おうと思います.

導入

coLinux側での導入

apt-lineの追加

まずapt-lineを追加しましょう:

deb http://backports.mithril-linux.org/debian woody subversion
deb-src http://backports.mithril-linux.org/debian woody subversion

apt-get

次いでapt-getしておきます.

sudo apt-get install subversion subversino-tools

svnserveの設定

ここらへんを参照のこと. svn://... でリポジトリにアクセスできるよう, svnserveを起動しましょう. まず/etc/servicesに

svn           3690/tcp   # Subversion
svn           3690/udp   # Subversion
を追加します. 次いで/etc/servicesに
svn stream tcp nowait svnowner /usr/local/bin/svnserve svnserve -i
を追加. これでsvn://localhost/...でリポジトリにアクセスできるようにな ります. 私は最初はuser: svnownerを設定せずにrootさんにしておきましたが, 事故を避けるためにはsvnownerなんてユーザを設定しておいたほうがいいでしょ うね.

cygwin側での導入

setup.exeからsubversionをそのまま入れるだけ.

運用

一連の流れ

ここを参照しております.

  1. 新規プロジェクトの作成
    cd ~/*your-project*
    svn import svn://your/host/repository your-project project-name -m "messages on log"
    
  2. チェックアウト
    svn co svn://...
    
  3. 作業を行う
  4. diffをとる
    svn diff filename
    
  5. revertする
    svn revert filename
    
  6. ファイルを追加
    svn add file_name	# 単独のファイルを追加
    svn add dir	# ディレクトリを再帰的に追加
    svn add -N dir	# ディレクトリを非再帰的に追加
    
  7. チェックイン
    svn ci -m "messages"
    
  8. 最新版をマージ
    svn up
    
  9. コミットした全変更を表示
    svn log
    
  10. project-yブランチを作成
    svn copy svn://your/host/repository/project-y svn://your/host/repository/project-y-branch -m "messages"
    
  11. リリースタグを作成
    svn copy svn://your/host/repository/project-y svn://your/host/repository/project-y_release1.0 -m "messages"
    
  12. ブランチをマージ
    svn merge svn://your/host/repository/project-y svn://your/host/repository/project-y-branch
    
  13. バージョン4を取得
    svn co -r 4 svn://.../project-y
    

XSteveさんのcheet sheet邦訳

XSteveさんのcheet sheetを訳してみた.

リポジトリを作る:
 svnadmin create svn_repos

ダンプ:
 svnadmin dump /home/rafael/svn | gzip -9 > dump.gz

ダンプを読み込む:
 gunzip -c dump.gz | svnadmin load /home/rafael/svn

---

これで動くはずですが, /etcにチェックアウトすることもできます:

$ svnadmin create /var/svnrepos/admin
$ svn mkdir -m "initial setup" file:///var/svnrepos/admin/trunk
c:> svn mkdir -m "initial setup" file:///c:/fhs/svn_repos/trunk
$ cd /etc
$ svn co file:///var/svnrepos/admin/trunk .
$ svn add passwd group
$ svn commit -m "start loading it in"

'svn co'を'.'で実行することもできます. ちゃんと動作します.
---

svn propset svn:keywords "LastChangedDate LastChangedRevision Id Author" weather.txt
svn propset svn:keywords "LastChangedDate LastChangedRevision Id" slides.tex
---

> よくあることなんですが, M個の異なるディレクトリにあるN個のファイルが
> 変更されたとして, そのうちのN-1個をチェックインしたいときにはどうす
> ればいいんでしょうか.

そうですね. 確かによくあることです. きちんとやろうと思えば複雑なコマン
ドラインが必要なので, 私は次のようにしています:

% svn diff path/to/file_not_committing > /tmp/patch.txt
% svn revert path/to/file_not_committing
% svn ci -m "committing all the stuff i wanted to"
% patch -p0 < /tmp/patch.txt

Revertを使うとこんなに簡単に実現できるんです.

参考