Subversionで論文管理

はじめに_

ファイルの管理ソフトであるSubversionを使うと、複数の計算機で仕事を継続的に続けるのに便利なのでお薦めです。ただし、ネットワークに繋げる必要があります。

使用の前提は以下の通り

  • どっかにSSHでログインできるサーバがある
  • そのサーバにリポジトリを置ける
  • クライアント側(実際に論文を書くマシン)にSSHとSVNが入っている

サーバ側(リポジトリの作成)_

リポジトリとは、ファイル情報を格納しておく本体です。正確な意味はe-wordsなどで調べてください。個人用途ならば、ひとつあれば十分です(ディレクトリで対応できるから)。

適当なところにリポジトリを作ってください

svnadmin create /path/to/repos

以上で、サーバ側の操作は終わりです。

クライアント側_

新しいディレクトリの作成_

リポジトリ内に新しいディレクトリを作りたい場合にはimportを行ないます。 以後は、ssh経由で操作を行なうこととします。

svn import mytree svn+ssh:///servername.hoge.jp/path/to/repos/mydir/mytree -m "Comment"

上記例は、クライアント側のローカルにあるmytreeというディレクトリ(その中にあるディレクトリとファイルも)をリポジトリにmydir/mytreeというディレクトリに置く場合です。ローカル側のディレクトリ名とリポジトリ側のディレクトリ名が一致する必要性はありません。

ソースファイルの取得(初回時)_

元ディレクトリがないディレクトリで操作してください。ソースファイルを取得するときには以下のコマンドを使います。

% svn checkout svn+ssh://servername.hoge.jp/path/to/repos/mydir/mytree

指定したディレクトリ以下を現在いるローカル側のディレクトリに展開します。

ソースファイルの取得(二回目以降)_

二回目以降は、以下のコマンドでO.K.です。楽ですね。

% svn update

あとは、参考リンクを見て。_

あとは、参考リンクを見てください。

% svn commit

リポジトリに変更結果を反映させる。ローカルの変更は、commitするまでリポジトリには反映されない。

% svn add filename/dirname

新しいファイルやディレクトリを加える

% svn delete filename/dirname

ファイルやディレクトリを消す

% svn update -r RevisionNumber

RevisionNumber(自然数)の状態に戻す(commitはできない)

% svn merge -r RevisionNumber1:RevsionNumber2 somedir

somedirのRevisionNumber1からRevsionNumber2の変更結果を現在のディレクトリに反映させる

たとえば、r250のときにわかれた支流(branche)を主流(trunk)に合流させるときには、まず、r250以降の主流の変更点を取り込んでから、支流の変更点を主流に合流させる

% svn merge -r 250:HEAD file://somedir/trunk
% svn status

衝突を修正後

% svn merge -r 250:HEAD file://somedir/branche file://somedir/trunk

現在のディレクトリ(mydir, リビジョン番号は、HEAD)を過去のリビジョン番号250に戻すときは、mydirにおいて以下のようにする

% svn merge -r HEAD:250 file://somedir/mydir

参考リンク_

Tips & トラブルシューティング_

Berkeley DBのバージョンアップに伴う処理_

brancheとtrunkのマージ_

マージは、リビジョン番号の同一なところだけで起こる。たとえばbranche/aのリビジョンが7、branche/bのリビジョンが9、brancheのリビジョンが9であるときに、trunkのリビジョンが8ならば、trunkに移動してから

cd trunk
svn merge -r 9:8 ~/branche

とやると、trunk/bは9になるが、trunk/aは8のままとなり反映されない。

これを防ぐには、trunkと定期的にマージして全ディレクトリのリビジョンを一緒にあげるしかない。その際には、branche側のもっとも低いリビジョン番号でマージすること。たとえば、たとえばbranche/aのリビジョンが7、branche/bのリビジョンが9、brancheのリビジョンが9であるときに、trunkのリビジョンが10ならば

cd branche
svn merge -r 10:7 ~/trunk

とする。

サーバ側のBerkeley DBのバージョンアップによりリポジトリが読めない_

Berkeley DBがアップグレードされると、リポジトリが読み込めなくなることがある。その場合は、以下の方法で復旧する。

復帰方法はWiki for Subversion:Q&Aに従う。

一応メモ。/home/svnにリポジトリがあるとする。

  1. svnを移動する
     % mv /home/svn /home/svn.old
    
  2. svnのdumpをとる
     % svnadmin dump /home/svn.old > dump.file
    
  3. リポジトリを作りなおす
     % svnadmin create /home/svn
    
  4. dumpしたリポジトリを読み込む
     % svnadmin load /home/svn < dump.file
    
  5. hooksにおいてあるスクリプトやDB_CONFIGを復帰
     % cp -p /home/svn.old/hooks/* /home/svn/hooks
     % cp -p /home/svn.old/db/DB_CONFIG /home/svn/db
    
  6. (場合によっては所有者の変更)