はじめに

repo='http://svn.momonga-linux.org/svn/pkgs'
という shell 変数が定義されているものとして話を進めます. 割と頻繁に URI を打つ事があるので短かめの変数を定義しておくことを お勧めします.

Q. 今のsvn repoって結局どうなのよ?

A. 以下のようになっています。(2006-08/15現在)
詳しくはここらへん参照 http://developer.momonga-linux.org/viewvc/ http://developer.momonga-linux.org/viewvc/branches/ 使う事が少ないtags以下は省略しています。
http://svn.momonga-linux.org/svn/pkgs
/
┣ trunk/
┃ ┣ pkgs/     最先端のパッケージ。通常はこちらを使用すればok。
┃ ┗ tools/    最先端のツール。通常はこちらを使用すればok。
┃
┣ branches/
┃ ┣ STABLE_1/ Momonga Linux 1 のfix用の枝。作戦行動終了。
┃ ┃ ┣ pkgs/
┃ ┃ ┗ tools/
┃ ┣ STABLE_2/ Momonga Linux 2 のfix用の枝。作戦行動終了。
┃ ┃ ┣ pkgs/
┃ ┃ ┗ tools/
┃ ┣ STABLE_3/ Momonga Linux 3 のfix用の枝。
┃ ┃ ┣ pkgs/
┃ ┃ ┗ tools/
┃ ┣ OBSO      古いもの。現在は使われていないものが移動された。ゴミ置き場。
┃ ┃ ┗ (いろいろ)
┃ ┗ TSUPPA4RI/ 突っ走りブランチ。trunkよりも危険なものを試すブランチ
┃    ┗ (いろいろ)
┗ tags/
   ┣ (省略)
   ┗ (省略)

Q. レポジトリをもってくる時はどうしたらいいすかねぇ?

A.
$ svn co $repo/trunk/pkgs
してください。 これによってtrunk(CVSでいうHEAD)レポジトリのpkgsのコピーを取得できます。 最初にツリーのディレクトリ構成の情報を取得するらしく、ファイルが 落ち始めるまで多少時間がかかります。気長にお待ちください。 toolsも一緒に落としてください。

Q. ファイルを追加したいんだけど。

A.
$ cd pkgs/hoge
$ svn add fuga.patch

$ svn commit -m "add fuga.patch" fuga.patch
してください。 これによってリポジトリにあらたに fuga.patch が追加されます。 svn の場合同時にcommit したものには同じリビジョンが振られるので、 できるだけ パッチ単体ではなく関連する spec ファイルといっしょに commit するようにしてください。

Q. 今作業しているディレクトリを STABLE_3 ブランチ相当のものにしたいっす。

A.
$ cd trunk/pkgs [pkgsディレクトリへ移動してから]
$ svn switch $repo/branches/STABLE_3/pkgs
このコマンドでディレクトリを STABLE_3 ブランチ の内容にswitchします。 今度、ここに変更を施して commit した場合には STABLE_3 ブランチに 変更が反映されます。

Q. 今作業しているディレクトリを STABLE_3_RELEASE タグ相当のものにしたいっす。

A.
$ cd trunk/pkgs [pkgsディレクトリへ移動してから]
$ svn switch $repo/tags/STABLE_3_RELEASE/pkgs
このコマンドでディレクトリを STABLE_3_RELEASE の内容にswitchします。 tag なので、ここには変更を行わないのがお約束です。

Q. 今ある作業ディレクトリをtrunkのものに戻したいっす。

A.
$ cd pkgs
$ svn switch $repo/trunk/pkgs
ディレクトリを trunk の最新内容にします。 つまり、この後で何か変更して commit した場合には trunk に変更が反映されます。

Q. trunk に import したものを STABLE_3 にもいれたいんだけど どうしたらいいですか?

A.
$ svn copy -m "merge from trunk" $repo/trunk/pkgs/hoge $repo/branches/STABLE_3/pkgs/hoge
 [ trunk から STABLE_3 へコピー ]
逆は
$ svn copy -m "merge from STABLE_2" $repo/branches/STABLE_3/pkgs/hoge $repo/trunk/pkgs/hoge
 [ STABLE_3 から trunk へコピー ]
実行時点でcommitされます。つまりsvn commitは不要です。 リポジトリ内で処理されるのでチェックアウトする必要はありません。

Q. STABLE_3 ブランチの変更をtrunkに反映させるのは?

A. STABLE_3 にcommitした際のリビジョンを 10000 とします。 つまり変更差分はrevision 9999から10000までの分とすると、
$ cd hoge
$ svn switch $repo/trunk/pkgs/hoge     [ hoge を trunk にする ]
$ svn merge -r 9999:10000 $repo/branches/STABLE_3/pkgs/hoge
[ STABLE_3 でのリビジョン 9999 と リビジョン 10000 の差分をtrunkにマージする操作]
$ svn commit -m "merge from STABLE_3"
$ svn switch $repo/branches/STABLE_3/pkgs/hoge [ hoge を STABLE_3 に戻す ]

Q. trunkにcommitした変更を STABLE_3 にもマージしたいっす。

A. trunk にcommit した際のリビジョンが 10500 だったとします。 つまり変更差分はrevision 10499から10500までの分とすると、
$ cd hoge
$ svn switch $repo/branches/STABLE_3/pkgs/hoge [ hoge を STABLE_3 にする ]
$ svn merge -r 10499:10500 $repo/trunk/pkgs/hoge
$ svn commit -m "merge from trunk"
$ svn switch $repo/trunk/pkgs/hoge [ hoge を trunk に戻す ]
svn merge は -r で指定されたリビジョンの変更を カレントディレクトリに適用するコマンドです。 上記の操作は、trunkで リビジョン 10499からリビジョン10500までに変更された内容を STABLE_3にmergeするということです。

Q. コンフリクトしたとかいわれちゃうんですけど?

A. 手修正してから svn resolved でコンフリクトが解決したことを明示してください。 commmit時に怒られた場合、修正してからsvn resolvedを実行してください。

Q. 今オイラはどこの枝にいる? trunk? STABLE_3?

A. svn info|grep URL と実行することでリポジトリの URL が表示されます それから判断してください。 例えばpkgsで URL: http://svn.momonga-linux.org/svn/pkgs/trunk/pkgs だと trunkです。 URL: http://svn.momonga-linux.org/svn/pkgs/branches/STABLE_3/pkgs だとSTABLE_3 ブランチです。

Q. .cvsignore が効かないのですが。

A. 無視して欲しいファイルは、ディレクトリに対して svn:ignore という キーワードをセットすることで指定します。複数のファイルを指定したい場合は 改行で区切って列挙します。また、コマンドラインからファイルリストを直接 指定する代わりに、-F filename でファイルの内容をファイルシストとして 使用することがでるので、既に .cvsignore が存在する場合は -F .cvsignore とすることで簡単に移行することができます。

Q. $Id: $ とかが展開されないのですが...

A. svn propset コマンドを利用してください。
$ svn propset svn:keywords Id hoge.c
とすると$Id: $ などが展開されるようになります。 Id 以外にも LastChangeDate, LastChangeRevision, LastChangeBy, HeadURL が使えます。複数指定したい場合は"Id LastChangeBy" のようにします。

Q. バイナリは?

A. メジャーな物は自動的に認識されます。バイナリと認識されるファイルは svn add の際に (bin) と表示されます。 明示的にバイナリ指定をしたい場合は
$ svn admin -kb hoge.bz2
としてください。

Q. tagを作るには?

A. svn mkdir"せずに" svn copyを行います。 こんな感じ
$ svn copy $repo/trunk $repo/tags/HOGE -m "hoge"

EOF