MS_SVNvsGitvsTFS - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

SVN vs Git vs TFS

概要

SVN vs Git

トレンドとしては、

  • Windows 環境でも OSS の SVN(Subversion)or Gitが利用されることが多い。
  • 分散型バージョン管理システムが必要であれば、Git。ただし、難易度が高い。
  • 分散型バージョン管理システムが不要であれば、
    以下の中央集中型のバージョン管理システムを使用する。
    • SVN(Subversion)
    • TFS(TFVC : Team Foundation Version Control)

補足(集中型と分散型の違い): 「分散型が必要かどうか」で切り分けているが、
実際に効いてくる差は以下である。

観点 集中型(SVN / TFVC) 分散型(Git)
コミット サーバへ即反映 ローカルに蓄積し、後で push
オフライン作業 ほぼ不可 可能(履歴もローカルにある)
ブランチ ディレクトリのコピー。重い 極めて軽い(参照の付け替え)
マージ 苦手とされた 得意
部分チェックアウト 可能(巨大リポジトリに強い) 原則リポジトリ全体
バイナリ資産 比較的扱いやすい 肥大化しやすい(Git LFS が必要)

「難易度が高い」という指摘は、
ブランチとマージの概念、そしてローカル/リモートの二層構造
理解する必要があるためである。
一方で、その軽量なブランチが
プルリクエストによるレビュー文化と CI を成立させた。

TFS

  • バージョン管理システムに中央集中型の TFVC だけでなく
    分散型の Gitも選択できる。
  • バージョン管理システムの機能だけでなく、ALM ソリューションとしての機能を持つ。
    ALM とは、ソフトウェア開発における要件管理から変更・構成管理、
    テスト管理(CI)など、アプリケーション・ライフサイクル全般を
    総合的にサポートする機能。

補足(最新化:TFS の現在): 製品名と提供形態が変遷している。

時期 名称
〜2018 TFS(Team Foundation Server) / Visual Studio Team Services
2018〜 Azure DevOps Services(クラウド)/ Azure DevOps Server(オンプレミス)

「ALM ソリューション」に相当する機能は、
Azure DevOps の 5 つのサービスとして整理されている。

サービス 役割
Azure Repos バージョン管理(Git / TFVC)
Azure Pipelines CI/CD
Azure Boards 課題・作業項目の管理
Azure Test Plans テスト管理
Azure Artifacts パッケージ(NuGet 等)のホスティング

TFVC は現在も利用できるが、新規プロジェクトでは Git が既定である。
Microsoft 自身も Windows / Office の開発を Git に移行している。

補足(現在の選択の実際): 「集中型か分散型か」で悩む場面はほぼ無くなり、
Git を前提に、どこにホストするかという判断に移っている。

  • パブリック / 一般的な開発 → GitHub
  • Microsoft スタックの統合 → Azure DevOps(Azure Repos)
  • 閉域網で自己ホスト → GitLab / GitBucket

SVN が残っているのは、

  • 巨大なバイナリ資産を含むリポジトリ
  • 部分チェックアウトが前提の運用
  • 移行コストに見合わない保守専用の資産

といったケースである。


Tags: 移行, .NET開発, 構成管理ツール, CI

⚠️ **GitHub.com Fallback** ⚠️