Windowsでgit svn(入門編

  • 投稿日:
  • by
  • カテゴリ:

プロジェクトではSubversionを使っているけど、自分のローカルではgitで管理できると便利そうと思ったことはありませんか?
結構、知らない人が多い気がしますが、実はGitにはgit svnというsvnのクライアントとして使える機能があります
https://git-scm.com/book/ja/v1/Git%E3%81%A8%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E9%80%A3%E6%90%BA-Git-%E3%81%A8-Subversion

簡単に説明をすると、Subversionのリポジトリからローカルにgitリポジトリとしてcloneして、その後は
gitコマンドで管理をして、Subversionへのcommitもローカルのgitリポジトリから普通にできるのです!

御託は無用。早速使ってみましょう。

●まずは、Windowsでgitとsvnコマンドを使えるようにします
自分はmsys2を使ってます。(たぶんcygwinです
http://sourceforge.net/projects/msys2/

普通にインストーラーを起動してインストールすればいいです。

●gitとsvnをインストールする
msys2を立ち上げたら、

shell > pacman -S git
shell > pacman -S svn

と打ち込んでください。
これでgitとsvnコマンドが使えるようになります。

●Subversionのリポジトリからgit svn cloneをする
Subversionのリポジトリが一般的なディレクトリ構成をしている場合はこんな感じでcloneしてください。
(ディレクトリ構成が一般的では無い場合はオプションを適切に設定する必要があるので注意

shell > git svn clone http://sabakan.org/svn/git_svn_test1 -T trunk -b branches -t tags git_svn_test1
Initialized empty Git repository in /c/Documents and Settings/taka/My Documents/projects/msys2_test/git_svn_test1/.git/

Authentication realm: <http://sabakan.org:80> SVN Repo
Password for 'taka':
r1 = c46bfa049e6c4ba8b9c28f219ff52f25bb552998 (refs/remotes/origin/trunk)
A docs/assets/css/combined.css
A docs/assets/fonts/BebasNeue-webfont.eot
A docs/assets/fonts/BebasNeue-webfont.svg
A docs/assets/fonts/BebasNeue-webfont.ttf
A docs/assets/fonts/BebasNeue-web

●git svn cloneしてきたリポジトリをチェックしてみましょう
ローカルブランチ
shell > git branch
* master

リモートブランチ
shell > git branch -r
origin/trunk

IDE等が自動で作成したディレクトリ等が
Untracked files:に表示されてうざい場合がありますが、
あくまでもコミット先はsvnのリポジトリなので.gitignoreなんて追加したくないと思います。
そういう時は
shell > echo ".idea/" >> .git/info/exclude

という風にexcludeにリポジトリの管理にしたくないディレクトリやファイルを追加してやれば
Untrackedに表示されなくなります。

●リポジトリを最新の状態にする
少し普通のgitと違いますね。

shell > git svn rebase

●ローカルのgitリポジトリからリモートのSubversionリポジトリにcommitする
まず、何か適当なファイルを編集してみましょう。

コミットの手順は普通のgitとほとんど変わりません。

変更を加えたファイルをaddします。
shell > git add public/index.php

commitするときに怒られるのでユーザ情報を登録しておきましょう。

shell > git config --global user.email "***********@gmail.com"

shell > git config --global user.name "taka"

ローカルのリポジトリにコミットします。
shell >  git commit -m "test commit"

Subversionのリポジトリにコミットします。
shell >  git svn dcommit

Committing to http://sabakan.org/svn/git_svn_test1/trunk ...

M public/index.php

Committed r5

M public/index.php
r5 = 741f4b928413ecb7b5f7984c58014c9126582cf5 (refs/remotes/origin/trunk)
No changes between ea3b20ffd8f85d32c5b7fe959dc4d7d351b7432c and refs/remotes/origin/trunk
Resetting to the latest refs/remotes/origin/trunk

無事にコミットできましたか?

ブランチの作成やマージに関しては、あくまでもコミット先がSubversionなので
いろいろと注意すべきことがあります。
その話は、また次回。

今日はここまで。
ハァハァ。