2009年4月11日土曜日

subversion - 基本編

* リポジトリの作成方法
mkdir /home/mike/svn-repos
svnadmin create /home/mike/svn-repos

* プロジェクトの作成方法
svn import -m "importing Sesame project" . file:///home/mike/svn-repos/sesame/trunk

# sesame/trunk は、実際にはまだ作っていないのに、追加できた。

* 作業開始
svn co file:///home/mike/svn-repos/sesame/trunk sesame

# 作業コピーは作業ディレクトリ内のsesameディレクトリにコピーされる
# 作業コピーには、.svnという隠し属性付きの管理ディレクトリが作成される

* subversionがプロジェクトの状態をどう捕らえているか確認する
svn statusは、ローカル環境の状況を表示する
svn status -v 追加情報が出る
svn status -u リポジトリとワークのリポジトリについて情報がでる

ディレクトリ自体がリビジョンNoの管理に入っている

修正やリポジトリと違う場合は、svn statusで出てくる。
この時に、M とか出て来たら、差異があることを示してくれる

# svn update は、ローカルで更新をしているファイルがある場合は
勝手にマージの動きをする?この手順だと修正は消えない。
実際に消したい場合は、revertを使うべきぽい。
svn update は、指定されたリビジョンのデータを拾ってくるだけで、
指定が無ければ、最新版のを拾う動きになる。最新版はHEADで表現できる。
たぶん、タグ名とかでも可能。

* 修正内容の差分の表示方法
svn diff は、ローカル環境とリポジトリとの差分を表示する動きをする.
svn diff -r[n] nに比較をしたいリビジョンNoを入れるとそれとの差分になる
svn diff -r[m]:[n] mからnまでのリビジョンの間の差を表示する

 指定しなければ、ワーキングディレクトリにあるファイル全部が対象
 個別にファイルの指定も可能になっているので、工夫はできる。

* リポジトリの更新方法
svn commit -m "[comment contents]"

commitを実施すると、リポジトリのデータベースが更新をされる。

 ファイルをcommitをして、statusを表示をさせたとする。
 ただ、この時点ではワーキングディレクトリのリビジョンは更新されていない。
 不一致が発生する場合は、svn update でディレクトリのリビジョンを更新しないといけない。
# 手順が分かれているのは理由がありそうだけど、現時点では不明

Number.txtを修正して、commit を実施しただけの時点

svn status -v
7 7 tota .
8 8 tota Number.txt
7 2 tota Day.txt

-------------------------------------------------------
svn update
-------------------------------------------------------
svn status -v
8 8 tota .
8 8 tota Number.txt
8 2 tota Day.txt

* リポジトリの更新の履歴を見る方法
svn log
svn log -v # 追加情報の表示モード
svn log -v -r PREV:HEAD PERV->HEADまでのログを表示する
出力の順番は、引数の与え方で変化する

* 競合の発生したときの確認方法と修正方法
 この状況は、svn commit が衝突した時に発生する。
 基本的には、先勝ちなので修正が遅い人にどのように修正するかの責任が発生する。
 ユーザに通知される時には、コミットが失敗しましたと言われることになる。
 
 解消の手順は以下のようになる。
  まずは、svn update を実施する。
  この時に、ローカルファイルの変更点が、リポジトリのバージョンの変更点とマージされる。
  修正箇所が同じじゃなければね。

 同じ業の場合は、svn update を実施しても、Conflicted だーと言われる事に成る。

 ここの確認方法は、Gがシステムでマージしてくれたことを示して、
 Cがシステムでマージの判断が出来なかった事を表している。

svn resolved PATH...
 このときの修正の方法としては、競合したファイルを開くと、ぶつかった位置にマーカが入っている。
 そこの修正を取捨選択をして、Subversionに競合が解消できましたーと教えてあげるといい。

 ただし、どのファイルの競合が解消できたかの宣言が必要で、
 ディレクトリ丸ごととかの横着はさすがに許してくれない。

 繰り返しの注意点としては、文脈上の解消をしてくれるわけじゃなくて、
 競合マーカをクリアするだけで、マーカとかは取ってくれないからね。

 競合マーカってのは、"<<<<<<" ">>>>>" で囲まれたところのこと
.mineってのが自分の修正した内容の部分で、.r[N]の部分がリポジトリの中の部分

* ファイル単位のリビジョン
 ディレクトリはログ関係もあるから、大体最新版と同じリビジョンNoになる
 ファイルも一つ一つリビジョンを持っていて、修正されたタイミングで更新される。
 ただ、連番に意味はなくて、そのときのディレクトリのリビジョンNoと同じ値に更新される

+ リポジトリへのオプションの設定方法ってどうやるんだろ?
 ログないとコミット禁止とか
 mantisへの指定方法とか

0 件のコメント:

コメントを投稿