しばらくgitしか使ってこなかったのですが最近久しぶりにsubversionを使う機会があったので、忘れないようにざっとポイントをメモっておきます。
- リモートリポジトリしかない。gitのようなローカルリポジトリはない。
- リモートリポジトリにバージョン管理させたいリソースを登録する場合はimportコマンドを使う。これが一番最初に行う作業。
- gitのようなブランチ、タグの機能はない。その代わり、慣例として各プロジェクトごとにtrunk、tags、branchesというフォルダをルートフォルダに作ってブランチやタグを管理する。
- commitコマンドでコミットするとすぐにリモートリポジトリに反映される。gitのようにコミットしたあとにプッシュする必要はない。
- コピー、削除、追加はsvnの対応するコマンドで行う必要がある。
- 作業フォルダでsvn updateを実行するとリモートリポジトリの内容が反映される。gitのプルと同じようにマージやコンフリクトの検出もされる。
- 作業フォルダでsvn statusを実行すると変更したファイルや管理外のフォルダが表示される。
- タグを打ちたい場合はcopyコマンドでtags以下の適当な名前のフォルダにコピーする(以降、変更は加えないこと)。ブランチを作りたい場合も同様にcopyコマンドでbranches以下の適当な名前のフォルダにコピーする(以降、変更してもよい)。
- コンフリクトすると、svn updateを実行する前に作業フォルダにあったファイル、そのファイルの変更する直前のリビジョンのファイル、リモートリポジトリでのHEADリビジョンのファイルの3つのファイルが生成される。
- コンフリクトの解決は対象ファイルを編集後にresolvedコマンドを実行する(上記3つのファイルは自動的に削除される)。
- ブランチからトランクにマージする場合はmergeコマンドを使用する。差分情報が必要となるのでブランチの変更前のリビジョン、変更後のリビジョンを指定する。トランクからブランチの場合も同じ方法でマージ可能。