!!! タグを付ける(svn copy) タグとは,ある時点でのプロジェクトの「スナップショット」のこと. タグを作成するには svn copy を利用する.例えば,g00/proj の最新のスナップショットを作るには 8< $ svn mkdir https://svn.cis.iwate-u.ac.jp/svn/csd/16/g00/tags -m "Make a tagging directory" $ svn copy https://svn.cis.iwate-u.ac.jp/svn/csd/16/g00/proj ¥ https://svn.cis.iwate-u.ac.jp/svn/csd/16/g00/tags/0.5 ¥ -m "Tagging the 0.5 release of the project." >8 https://svn.cis.iwate-u.ac.jp/svn/csd/16/g00/proj が最新のディレクトリ https://svn.cis.iwate-u.ac.jp/svn/csd/16/g00/tags/0.5 がその最新のコピーの保存ディレクトリになる. ログを,-m "メッセージ" で与えておく. !!! 「タグ」と「ブランチ」 !! タグ タグとブランチの概念を一言で言えば, * タグ:ある時点でのソースのスナップショット * ブランチ:あるソースの本流(trunkという)とは異なる別の開発版 といったイメージである(多少の語弊はあるかも). svnはバージョン管理システムなので,コミットした際の各々の時点でソースが保存され,必要に応じて戻すことができる(これをロールバックという).その戻すための手掛かりは(svnでは)「リビジョン番号」と呼ばれ,初回のコミット時から順に1, 2, 3, ...という番号で管理される. しかしながら,自分が戻したい時点のリビジョン番号を覚えている!などという人はほぼいないと思われるので,人間でも覚えておけるような,'''何らかの文字列で管理する'''機能を実現しているのが「'''タグ'''」である. <<{svntag.png} ある時点のソースコード全体に対し,本来のタグのように文字列で目印をつける(先に示した手順を行った場合,'''0.5'''という名前でタグをつけたことになる).タグをつけた時点のソースコードが必要な場合,その「タグ名」を使ってソースをチェックアウトすれば良い.この機能は,開発においてはいわゆる安定版やリリース版を保持するためによく使われる. !! ブランチ ブランチとは,メインのソースコード開発を川の本流に例えるなら支流にあたる概念をいう.新たな機能をソースコードに付け加えたいが,失敗するかもしれないし,その一方で現在までのソースコードは保持し続けなければならない.このように,メインとなる開発を続けながらも,また別の新たな機能開発を並行して行いたい,といった場合に,「メイン版とは別にそれをコピーした別のリポジトリを作って管理」する.ただし,全く別々に管理する,のではなく,必要に応じてメインの変更を反映したり,新たな機能の開発が成功したら,メインに取り込みたい.こういった用途で作られるものが「ブランチ」である. !!! 再びsvn copy 概念としては全く異なるタグとブランチであるが,'''svnではタグもブランチも同一のものとして扱われる'''.svnでは,スナップショットをとったとき,それ以降はコミットを行わないものをタグ,以降も引き続いてコミットを行っていくものをブランチ,として扱う.いずれも 6< 8< $ svn copy <スナップショットをとるソースコードのURI> <スナップショットをとる先のURI(新規)> >8 >9 というコマンドで作られる.違いは'''システムが決めるのではなく,扱うユーザが決める'''(このスナップショットは変更しない,これは変更するといったルールを,自分たちで決めて管理する). このような事情から,svnでは,慣習的にプロジェクトのトップディレクトリの下に * trunk (ソースコードの本流) * tags (タグを置く場所) * branches (ブランチを置く場所) という3つのディレクトリを作って管理することが多い.tagsにはタグを置き,branchesにはブランチを置くと決めておくことで,両者の混同を避けている. !!! svn merge ロールバックを行いたい時に使う.詳細は(本講義では)省略するが,特定のファイルを特定リビジョンに戻したい場合は次のようにする. 6< 8< $ svn merge -r[現在のリビジョン]:[戻したいリビジョン] {file_path} >8 >9