Edited at

GitからSubversionを理解するためのメモ

More than 3 years have passed since last update.


これは何?


  • 今更聞けないけど、Subversion(以下、svn)を触らないといけないことになったので、メモ

  • 前提としてGitは知っているという前提

【注意】

理解したことをまとめてるだけなので、変なことを書いているかもしれない。そしたら教えていただきたい。


導入(インストール)


  1. 今回導入するのはWindowsなので、Apache SubversionのページからWindowsインストーラを探してくる。

  2. いくつかダウンロード先があり、何が違うのか、何を選んだら適切なのかよくわからない。
    とりあえず、一番下のものを選んだ。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をフォルダとして分けて識別する(慣習)。

【参考資料】


リポジトリの作り方のコマンドは?


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だけ)

実際は、一行で。


trunk,branches,tagsを作る

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 に移行をサポート?

周りの人に聞いた結果、SVNではあまりコマンドベースで触らないらしい。

Windowsでは、TortoiseSVN等を使ってGUIから触るのが一般的のよう。