Subversion ブランチとタグ
1.ブランチ/タグ
1-1 ブランチ/タグの設定
Subversionはブランチとタグは区別がなく単なるファイルの複製でしかない。どちらもsvn copyによりコピーすればよい(コピー先のディレクトリがブランチ名/タグ名と見なせる)。コピーするとファイルがAddされるので、最後に忘れずcommitをすること。
ブランチとタグを区別するためにコピー先をディレクトリで分けておくとよい。
以下の例ではtrunkに本流のソースがあり、branches以下にブランチ、tags以下にタグを格納するものとする。
SampleProg/ プロジェクトTop +----trunk/ 本流のソースを格納 +----tags/ タグを格納する為のディレクトリ +----branches/ ブランチを格納する為のディレクトリ
ブランチの作成
TrunkからdevBranchブランチを作成する # cd (作業ディレクトリ) # svn copy trunk branches/devBranch A branches/devBranch <== trunkの内容がbranches/devBranchにコピーされる # svn commit
タグの設定
TrunkにbetaReleaseタグを設定 # cd (作業ディレクトリ) # svn copy trunk tags/betaRelease A tags/betaRelease <== タグもブランチと同じくコピーするだけ # svn commit
1-2 ブランチのベースRev.の取得
ブランチのベースRev.(copyした時のRev)を取得したい場合、ブランチのディレクトリで--stop-on-copyオプションを付けてsvn logを実行すればよい。--stop-on-copyを付けるとcopyされた時点より以前のログが表示されなくなるのでベースのRev.を取得でき る。以下の例だと、devBranchブランチはr397をベースにsvn copyされていることになる。# cd branches/devBranch # svn log --stop-on-copy <略> ------------------------------------------------------------------------ r399 | kztomita | 2006-06-06 18:31:49 +0900 (火, 06 6月 2006) | 2 lines xxxx修正 ------------------------------------------------------------------------ r398 | kztomita | 2006-06-05 15:39:49 +0900 (月, 05 6月 2006) | 3 lines 新機能開発用ブランチ追加 ------------------------------------------------------------------------ #
1-3 変更のマージ
あ る変更を作業コピーにマージするにはsvn mergeを使用する。svn mergeはsvn diffと同様に二つのパスの間の差分を取り出す。異なるのはsvn diff は差分を標準出力に出力するのに対し、svn mergeは差分を現在の作業ディレクトリに反映させる点。svn mergeを行っただけでは、作業ディレクトリが更新されるだけでリポジトリは更新されないので、マージした結果は最後にcommitすること。マージ内 容に問題があればsvn revertで元に戻せばよい。あらかじめConflictするかチェックしたいような場合は--dry-runオプションをつけると、マージ結果が svn statusの形式で表示される。--dry-runを付けた場合は、マージ結果が表示されるだけで作業ディレクトリのファイルが変更されることはない。
ブランチの変更内容をTrunkにマージする場合は以下のようにする。以下の例ではbeta_releaseブランチのRev.268以降の変更を Trunkにマージしている。mergeは作業ディレクトリのファイルに対して差分を反映するのであらかじめTrunkの作業ディレクトリにcdするのを 忘れないように。
# cd (trunkの作業ディレクトリ)
# svn merge -r 268:HEAD file:///home/SV/TestRepos/SampleProg/branches/beta_release
# svn commit
マージする際はどのブランチのどのRevをマージしたかをcommitログに残しておくとよい。例えば「beta_releaseブランチの r268〜r300をマージ」という感じで。
1-4 リポジトリの切替え
現在の作業ディレクトリを他のブランチやタグのものに切替えたい場合はsvn switchによりできる。以下はdevBranchブランチへの切替え。# svn switch file:///home/SV/TestProgram/SampleProg/branches/devBranch