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

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

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への移行をやってみたログ

krlnmattun
ゲーム会社でUnityエンジニアやってます。基本的には備忘録。おふとんはお友達(:3[___]
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした