LoginSignup
0

More than 3 years have passed since last update.

git-svnでSVNをgitで開発できるようにしてみた

Last updated at Posted at 2020-02-19

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になります。

masterからbranch作成
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

この状態になったらstashresetしてから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への移行をやってみたログ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0