LoginSignup
3
5

More than 3 years have passed since last update.

SVNを職場で使っている人から見たGitの利点

Posted at

どうも、客先常駐エンジニアのCLBです。
現在こんな環境で仕事をしています。

  • 職場:SVN
  • 家:Github(Git)

これをやってると、「こんな理由でGitの方がいい!」と感じてきたので書いてみます。

コミットしてもコンフリクトが起こらない

SVNで同じファイルを2人以上で触っていると、こんなことが起こります。

Aさん「作業出来た!コミット!」
SVN「Bさんの作業とコンフリクトしてます。」

Aさん「しゃーない。コンフリクト解消するか。」
SVN「解消を確認しました。コミットします。」

Aさん「作業出来た!コミット!」
SVN「Bさんの作業とコンフリクトしてます。」
Aさん「またかよ・・・」

「そうならないようにルールを決めるんだよ!」と言われましたが、
そのルールは大抵の場合、以下のような形になります。

  • SVNでロックを掛け、他の人が触れないようにする。その間、他の人の作業は中断される。
  • コミットをなるべくしないようにする。ちょっと前のものに戻す事はあきらめる。

Gitの場合、リモートからクローン(SVNで言うチェックアウト)すると、
リポジトリが個々のローカル環境に作成されます。
コミットもそのローカルリポジトリに行われるので、この時点ではコンフリクトは起こりません。

「待って、それじゃあローカルからリモートに移すにはどうすればいいんじゃ」

と声が聞こえてきます。Gitではこの操作をプッシュと呼びます。

SVNではコミット=リモートリポジトリへ反映ですが、
Gitのコミットではリモートリポジトリへは反映されません。
反映はプッシュ操作を行う事で初めてリモートリポジトリへ資産が移送される仕組みです。

この時、リモートリポジトリで何らかの変更があった場合はコンフリクトが発生します。
しかしSVNの時と比べ連続してコンフリクトを解消する手間が省け、
しかもコミットを積極的に行う事が出来るようになるのです。
他の人の作業が中断されたりすることもありません。

柔軟にコミットを管理することが出来る

前の項目でも述べた通り、コミットもそのローカルリポジトリに行われるので、
コミットを後から修正したり出来ます。
特に強力なのがsquash機能です。
これは複数のコミットをまとめる事ができる機能で、
これを利用する事によりコミットログを綺麗にする事が出来ます。
SVNでは"たとえ細かい修正コミットでも無かった事にしてはいけない。"
というスタンスなので、このような事は出来ません。(シュタゲかな?)

先進的なツールと連携出来る。

※これは、私が知る範囲での話です。
問題等があれば遠慮無くコメントをお願いいたします。

Gitの良いところはGitだけでは無く、GithubGitLabと言った先進的なツールと統合出来ることです。
これらのツールで良いところは、

  • マージリクエスト時の比較ツールが見やすく、効率よくレビューを行う事が出来る。
  • CIツールと連携してマージリクエスト時に自動的にテストを行う事ができ、その結果を上記のツール内で確認する事が出来る。
  • xxのソースコードの何行目と言ったステップ単位でコメントを書く事が出来る。

という点があげられます。
特にこれらの機能が1つのツールで行えるため、SVNで同様の事を実現しようとすると
ビルド確認は Jenkins, タスク管理は Redmineなどツールが分散しないのが良いと感じました。

終わりに

今まで「Gitの方が良い。」とよく耳にしてましたが、
実際にやってみると「確かになぁ。」と思う部分があります。
これをみてGitを使う現場が増えてくれれば良いと思います。

3
5
0

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
3
5