ちょっとした開発プロジェクトにアサインされて、既存のコードベースを教えてもらったら、 Subversionのリポジトリが送られてきて残念、、なんてよくある話なのですが、 2013年にSVNってのもなぁということで、git-svnを使ってみることにしました。 社内にはgitのリポジトリあるのでどっかでシレっとそっちにpushして今後はこっちで、、とか?w #とは言え、私のGitレベルは↓の本が積んである状態なのですが…。
■ git svnがどんな感じかを知る とりあえずマニュアルのページをサクっと流し読みしてみます↓ https://www.kernel.org/pub/software/scm/git/docs/git-svn.html コマンドは『git svn~』って感じで、init, fetch, clone, rebase,,って馴染みなコマンドが 羅列されてるけどpushするのは『dcommit』らしい↓
Commit each diff from the current branch directly to the SVN repository
ということで↓みたいな流れでやればイイのかな?って感じですかね。
git svn clone https://リポジトリURL/trunk ↓ ローカルはgitでやりくり ↓ git svn dcommit
■ Windowsでgit svnを使うには 会社の開発マシンはWindowsなのですが、私は普段『Git for Windows』を使っています。 #付属ツールのGit Bashは結構イイ感じなので重宝しています ※ ----- 3月7日追記 ここから ----- ※ 『Git for Windows』ではgit-svnを使えないと思っていたのですが、 ishisakaさんにコメントいただきまして、Git for Windowsでもイケるはず、と。 早速やってみたら↓の用にうまくいきました。
Welcome to Git (version 1.8.1.2-preview20130201) Run 'git help git' to display the help index. Run 'git help <command>' to display help for specific commands. shinodogg@HogeHage ~ $ mkdir svn shinodogg@HogeHage ~ $ cd svn shinodogg@HogeHage ~/svn $ git svn clone -s https://リポジトリURL/ Initialized empty Git repository in c:/Users/shinodogg/svn/xxxxx/.git/ r1 = 5exxxxxe61efd701aaf332d69cc89cf7c0a427478 (refs/remotes/trunk) A hoge/conf/aaa.txt A hage/conf/bbb.txt r5 = 89xxxxxx92a5a4674944b32c3604bff50b90d4fe5 (refs/remotes/trunk) A batch/src/main/com/hage/aaa.java
↓ついでに、、
・Git for Windowsのバージョンを最新版の1.8.1.2にしました
・git svn cloneは-sオプションでSubversionのtruncとかbranchとかtagをイイ感じに
やってくれるということで、そうしました。
今後はGit for Windowsでやりくりしようと思います。
msysGitよりもGit for Windowsの方がマゾくなくてナイスなので。
※ ----- 3月7日追記 ここまで ----- ※
が、『Git for Windows』ではgit svnがサポートされていません。
↓のWebサイトによると、
Git for Windows / msys Git 1.8.1.2リリース | OPC Diary - No Code, No Life.
↓なそうなのですが、git svnを使うには言及されている"msysGit"を使う必要があります。
基本的にGitの開発環境とソースコードが必要ない、ただGitと関連ツール(BashとかUnix由来のシェル、ツール)が必要な人はGit for Windowsをダウンロードされて、インストーラーによるバイナリのインストールをお勧めします。msysGitをわざわざ落として、コンパイルで苦しめられるマゾい事をする必要はありません。
msysGitのホームページに行くと↓のように 『Git for Windows』と『msysGit』について言及されています。 メモ 【git】svnとの連携によると、
git-svn gitとsvnとの連携をするためのものです。msysgitでは最初からインストールされていました。
とのことで、msysGitをインストールすりゃ良さそうね、と。 msysGitのFAQを見ると↓のような事が書いてあって、 SubversionをコンパイルするのにPOSIXのCが必要だけどWindowsはソレがないので、 Msysってのがあるらしく、それに対応したバージョンのPerlが必要とかそんな感じみたいです。 ■ msysGitのインストール ダウンロードのページからexeを落としてきて、 指示に従っていくと、コンソールが立ち上がります↓ ズダーっとインストールの処理が流れていきますが、途中でピタっと止まってしまいました。。 ↓repo.or.czってとこの公開鍵が云々と。。 プロキシの設定とかのアレか分かりませんが、全然返ってこないので、Ctrl+Cして、 git svnを叩いてみたら、、、なんかイケるくさい、と。。 が、ps1が動かなくちゃっいました↓Git for Windowsと見るとこが違うみたいです。
exe": /git/contrib/completion/git-completion.bash: No such file or directory exe": __git_ps1: command not found
毎回何するにも"command not found"って言われるのウザ過ぎるので、、 ↓のGit for Windowsの方からコピって、、 ↓msysGitでNo such fileって言われたとこにディレクトリ掘って配置 コレで事なきを得たようです。。 #Git for Windows入れてない人はどうすんだろ…?っていうか、 #インストールを途中で止めちゃったからイケないんだなきっと。。 #不都合出てきたらインストールし直すか。。 ■ git svn cloneでSubversionからチェックアウト 適当なディレクトリを作ってgit svn cloneを叩くとinitもついでにやってくれて ↓のようにドワ~っとチェックアウトしてきます。
$ git svn clone https://リポジトリURL/trunk Initialized empty Git repository in c:/msysgit/git/hage/trunk/.git/ r1 = 99980000000000332xxxx7c0a427478 (refs/remotes/git-svn) A hoge/aaa.txt A hoge/bbb.txt A hoge/ccc.txt ~略~ r98 = 29999999999422f4d2fe440a18274d88bda81 (refs/remotes/git-svn) M hoge/hage/aaa.java r99 = 99990cc7ad1f063dcazzzzzzzzzz242eb83fb (refs/remotes/git-svn) M hoge/hage/bbb.xml
SVNのリビジョン一つ一つに対してGitの形式のファイルに変換して保存してるんですね。 今回はSubversionに1000以上のリビジョンがあったので、20~30分かかりました。 ■ git svn dcommit でSubversionにpush ローカルで普通にgitでaddしてcommitしてアレやコレややった後に、 git svn dcommitしてやると、、、 ↓のようにSubversionクライアントから見た時にファイルはもちろんですが、コメントも追加されています。
使えそうな手応えは掴めたのでちゃんとmsysGitをインストールし直して業務で使ってみましょかね~