Help us understand the problem. What is going on with this article?

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

More than 5 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から触るのが一般的のよう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away