そんなにころころ変わるものでもないけど2017年版。
Subversion (SVN) とは
Gitが流行る前に主流だったバージョン管理ツール。
もちろん現在もあらゆる現場で使われている。
Gitとの大きな違いはそのファイル管理方式だが、使い始める上では特に理解する必要はない。
名称 | ファイル管理方式 |
---|---|
Subversion | 集中型 |
Git | 分散型 |
利用フロー
一般的なワークフローは本流のTrunkと作業用のBranch、リリース用のTagを分離して利用するケースが多い。
- TrunkからBranchを作成
- Branchでファイルを変更
- 変更をCommit
- (2-3を繰り返し)
- 開発が完了したら、BranchをTrunkにMerge
- TrunkからTagを作成
- Tagからリリース
用語
太字の用語さえ理解していればなんとかなる。
それぞれの用語の和訳を理解していれば大抵想像がつくようになっている。
名称
名称 | 読み | 直訳 | 説明 |
---|---|---|---|
Repository | リポジトリ | [貯蔵所、倉庫] | TrunkやBranchなどすべてを包括するもの。 |
Trunk | トランク | [(木の)幹,樹幹] | そのプロジェクトの最新のソースが管理されるベース。基本的にTrunkを直接変更してはならない。 |
Branch | ブランチ | [(木の)枝] | 開発を行う際に作成される作業ワーク。 |
Tag | タグ | [付け札] | リリースバージョン。後で差し戻しなどを行えるよう、リリース時点のTrunkの状態を保存しておくためのもの。 |
Revision | リビジョン | [改訂、修正] | Commitを行った時点(セーブポイント)のこと。r1234 などと表記され、数値が増えていく。後からこの地点に戻したり、リビジョン同士で差分を出したりすることができる。 |
操作
操作名 | 読み | 直訳 | 説明 |
---|---|---|---|
Commit | コミット | - | 保存する・セーブポイントを作る。この操作を行うとRevision番号が上がる。 |
Merge | マージ | [併合する] | SVNでは大抵BranchをTrunkに取り込むことを指す。分岐した枝(ブランチ)をひとつに戻すということ。 |
Revert | リバート | [戻す] | 指定したRevisionの状態に戻す。 |
Checkout | チェックアウト | - | Branchなどをローカルに持ってくる、最初に行う操作。 |
Export | エクスポート | - | ソースをローカルなどにダウンロードする。Checkoutと違う点は、コミット情報を持たない生のファイルのみを保存するというところ。 |
SVNで開発を行う上でやってはならないこと
開発中Branchがある状態で、Trunkに直接変更を行いCommitする。
BranchをTrunkにマージできなくなったりする。
解決法はあるが大抵面倒なことが発生するのでやらない方が良い。
ツール
TortoiseSVN
基本これを使ってチェックアウトやコミットなどを行う。 Tortoise
はトータスと読む。
Tips
マージ操作
Branch開発中にTrunkが更新された場合に、開発BranchにTrunkを取り込む場合はマージを使う。
(ここではTortoiseSVNを使う前提で説明する)
まずはマージしたいBranchを選択してSVNメニューの マージ(M)...
を選び、次のように進めていく。
項目 | 値 |
---|---|
マージタイプ | リビジョンの範囲をマージ |
マージ元のURL | TrunkのURL |
マージするリビジョンの範囲 | すべてのリビジョン |
マージオプション | お好みで |
ここでマージに問題が無ければすんなり通るが、コンフリクト(競合)が発生した場合は警告が出力される。コンフリクトが発生した場合には人間が手動でファイルの差分を確認しながら1行ごとにマージ作業をしなければならない。
この時TortoiseSVNは、「Trunkのファイル」「Branchのファイル」「作業コピー」の三種類のファイルを自動生成する。最終的な目標はTrunkとBranchのファイルを正しくあるべき状態で保存し、それを作業コピーとしてコミットすることだ。
マージ作業にはWinMergeなどのツールがよく利用されるが、ともかく作業コピーにあるファイルの状態を正しいものに修正し終えたら、TortoiseSVNのメニューから対象ファイルを 競合の解決(O)...
から解決マークを付ければ競合の問題は解消されたことになる。
参考リンク: TortoiseSVN/競合してコミット出来ない時には - tracpath.com