SVNが使いにくい・・・
現在、お仕事でSVNを使用しているのですがgitに比べるとやはり使いにくい。
特にローカルコミットができずに変更点をそのまま抱えておくのがすごく面倒くさいです。
というより1回間違ったファイルをコミットして嫌気が差したのでgit化できないかと調べてみたらたくさん出てきました。
というわけでやってみます。
Gitリポジトリを作る
Gitリポジトリ用のディレクトリを作成した後、SVNリポジトリからGitリポジトリを作ります。
git svn init -s --prefix=svn/ http://hogehoge.com/svn
git svn fetch
リビジョンが多いと数時間はかかるので時間がある時や放置できそうなタイミングでやるのが良いと思います。
僕の環境では何も起きずに終わりましたがエラーが発生したらリビジョンを指定してfetchするのが必要になるみたいです。
正直ここまで出来たらほぼ終わったようなものです。
ブランチを切る
この辺から通常のgit操作とほとんど変わらないです(コマンドが若干違うくらい)。
GitリポジトリのmasterブランチがSVNのtrunkになります。
git checkout master
git branch hogehoge
git checkout hogehoge
SVNリポジトリの変更を取り込む
masterブランチにSVNの変更点を取り込む場合、svn rebaseをします(gitにおけるpullみたいな感じ)。
git checkout master
git svn rebase
この時、ローカルに変更点があると次のエラーログが出ます。
update-index –refresh: command returned error: 1
この状態になったらstashかresetしてからsvn rebaseしましょう。
切ったブランチにmasterブランチの変更を適応したい場合はmargeします。
git checkout master
git svn rebase
git checkout hogehoge
git marge master
SVNリポジトリにコミットする
masterブランチにcommit後、svn dcommitでSVNリポジトリにコミットすることができます(gitにおけるpushみたいな感じ)。
SVNリポジトリには「gitからコミットされた」みたいな余計な情報は付加されないので素直にコミットして大丈夫です。
git commit -m "こみっとこめんと"
git svn dcommit
おしまい
これでSVNリポジトリをgit環境で開発することができます。やはりローカルブランチを切れるのは良い!
普段はVSCodeで開発をしており、GitLensをずっと使いたいと思っていたのでこれから捗りそうです。
構築にちょっと時間はかかりますが「SVNがヤダ!」って言う人はやってみる価値はあると思います。
何かあったらコメントください。
参考
interprism's blog 現場がSubversionでつらい貴方へ…自分だけこっそりGitで開発する方法
のぶろぐ git-svnを使った開発の手順
Qiita:git-svnでSVN→Gitへの移行をやってみたログ