これは何?
- 今更聞けないけど、Subversion(以下、svn)を触らないといけないことになったので、メモ
- 前提としてGitは知っているという前提
【注意】
理解したことをまとめてるだけなので、変なことを書いているかもしれない。そしたら教えていただきたい。
導入(インストール)
- 今回導入するのはWindowsなので、Apache SubversionのページからWindowsインストーラを探してくる。
- いくつかダウンロード先があり、何が違うのか、何を選んだら適切なのかよくわからない。
とりあえず、一番下のものを選んだ。svn serverも同封されていることも確認。
http://sourceforge.net/projects/win32svn/
【参考資料】
運用方法は?(Gitと比較しながら)
標準的な?フォルダ構成(慣習らしいので従う)
-hoge-+-trunk
+-branches
+-tags
- trunk - git の master branchに相当する
- branches - git の branch に相当する
- tags - git のタグに相当する
Gitでは、tag, branchが機能として組み込まれているが(仕様)
Svnでは、tag, branchをフォルダとして分けて識別する(慣習)。
【参考資料】
- http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.branchmerge.using.html
- http://promamo.com/?p=809
- http://pokotsun.mydns.jp/?p=790
- http://qiita.com/mountcedar/items/e756bb9136e3b1722bb2
リポジトリの作り方のコマンドは?
git initに相当すること
git : git init --bare
カレントディレクトリにリポジトリが作られる。
svn : svnadmin create c:\svn-repo\test-repo
指定したパス先にリポジトリが作られる。
リポジトリができたかどうか確認する。
svn info file:///c:/svn-repo/test-repo
※指定するファイル・パスが、c:\svn-repo\test-repo
から file:///c:/svn-repo/test-repo
に代わるので注意。
(¥マークが/(スラッシュ)に代わる)
trunk/branches/tags のフォルダを作る(svnだけ)
実際は、一行で。
svn mkdir
file:///c:/svn-repo/test-repo/trunk
file:///c:/svn-repo/test-repo/branches
file:///c:/svn-repo/test-repo/tags
-m "create init folders."
git clone に相当すること
svnではcheckoutというらしい。
git : git clone file:///c:\svn-repo\test-repo
(暗黙的にmaster branchからcloneされると考える)
svn : svn checkout file:///c:/svn-repo/test-repo/trunk
(svnではtrunkがgit masterブランチ相当なのでこうなる)
(このままだとtrunkというフォルダがカレントディレクトリに作成されてしまう。)
カレントディレクトリに直にcheckout(clone)する場合
svn checkout file:///c:/svn-repo/test-repo/trunk .
作成されるカレントディレクトリに名前を指定してcheckout(clone)
svn checkout file:///c:/svn-repo/test-repo/trunk hoge
【参考資料】
git add/commit/push に相当すること
svn add test.txt
svn commit -m "xxxxx" && svn update
※ gitの場合、cloneした時の向き先は、originにcloneしたリポジトリ。svnも同様になっている模様。
※ svnの場合、ファイルステージング?と呼ぶような場所がないので、add -> commit で git の add/commit/pushの操作に相当する。
※ svn update
は、何に相当するのかよくわからない…(要調査)
git remote 的な話。
commit(gitでいうところのpush)する際の向き先について。
svnは集中型のリポジトリなので、commitの向き先が変わるということはない。(違うサーバになるということはない)
(gitの話)commitする時に、どのブランチにpushするか?というのは、
```git push -u origin XXXXX```` で指定してあげます。
(svnの話)commitするときに、pushされるので、あらかじめgit checkout
相当のことをしておく必要がある。
svn switch file:///
的な感じで。
git checkout -b XXXXX に相当すること
git checkout -b XXXXX
は、XXXXXという名前のブランチを作って、そのブランチに移動する。というもの。
実際に一度にはできないみたい?なので
ブランチの作成
git branch XXXX
に相当
svn copy file:///c:/svn-repo/test-repo/trunk file:///c:/svn-repo/test-repo/branches/branch1 -m "hoeghoge"
ブランチに移動
git checkout XXXX
に相当
svn switch svn://id@host/path/to/svnroot/branches/branch1
そのほか参考資料
svn -> git に移行をサポート?
- http://japan.blogs.atlassian.com/2014/03/git-svn-tips-and-tricks/
- https://www.atlassian.com/ja/git/migration#!migration-share
周りの人に聞いた結果、SVNではあまりコマンドベースで触らないらしい。
Windowsでは、TortoiseSVN等を使ってGUIから触るのが一般的のよう。