Git
Subversion
GitLab

Gitを導入するために色々調べてみた ~Subversionとの比較編~

勤務先をSubversion(以下、SVN)からGitへの移行することを勝手な使命としている為、
移行のメリットをより説得力のある形で説明出来るように調べてみました。

移行経験がある方、是非コメントお願いします。

GitとSubversionの違い

Gitは分散型、SVNは集中型

Gitはローカルリポジトリを作成できるのに対し、SVNはリモートリポジトリのみ。

Git(分散型)のメリット

512px-Git-logo.svg.png

  • 全体で共有しなくても良い内容でも一時保存出来る
    →例えば、試しに2パターン作ってみてとりあえずローカルコミットし、比較することができる
  • リモートリポジトリが死んでいてもローカルコミットができる
    →サーバーがダウンしていたとしてもとりあえず保存できる。サーバーの可用性上げろってのは言わない約束で・・・

  • ブランチを切りやすい
    →作業ごとにローカルブランチを切って作業ができる為、作業の中断が発生した場合にとても便利。
    SVNの場合は別途チェックアウトするか、作業内容をコピーして一度リベートするかしか中断できない。

  • ブランチ、マージが軽量
    →SVNと比べてマージがとても早い。ブランチもささっと切れる。

  • 各々がバックアップになる
    →開発者がそれぞれのPCにリポジトリを持つことになる為、サーバーが死んでもリポジトリは残っている。

SVN(集中型)のメリット

200px-Subversion-logo-cropped.png

  • 構造がシンプル
    →完了した作業をリモートリポジトリにコミットするだけの為、シンプル

個人的には慣れてしまえば構造のシンプルさは大したメリットではないし、
明確な運用ルールを決めてしまえば大丈夫だと思う。
これだけ確認のステップがあれば間違えてコミットする可能性も減る為、むしろメリットと言えそう。

  • リビジョン番号がシンプル SVNはリビジョンを数字で管理するが、Gitはハッシュ値で管理している。
    リビジョン番号○○見てください〜みたいな発言はしやすい。

手始めにgit-svn使ってみた

SVNのGit移行について調べるとよく見かけるので、職場で自分だけ導入してみた。

行った作業

  • SVNユーザーとGitユーザーの紐付け
  • 管理対象外ファイルの設定
  • masterブランチとSVNブランチの紐付け
    →本来はtrunkと紐付けるがブランチで作業していた為、設定した
  • リポジトリのクローン
    →ソースとログの取得を行う

所感

ローカルブランチがとても便利。タスクをRedmineで管理している為、
チケットごとにブランチを切ることで作業を中断して別ブランチで作業出来るのは本当に助かる。

デメリットは、操作に慣れていない為、コミットログを間違えた時や競合が発生した時にテンパってしまったこと。
ちゃんと勉強しろって話ですが。

まとめ

SVNのメリットはシンプルさ(学習コスト)くらいなので、それならより高級な機能が使用できるGitを使用したい。
(希望になってしまいますが)

大変な学習コストでも無いし、最近は連携するツールがかなり増えてきている為、Gitの方が何かと使い勝手も良い。

参考

以下、参考にさせていただきました。
ありがとうございます。

http://tracpath.com/works/development/subversion_vs_git/
http://programming-study.com/trouble/git-subversion-which-should-i-use-for-source-code-control/
https://qiita.com/sh-ogawa/items/0bac2516d85e3db4dfd8