0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SubversionからGitへの移行ガイド

0
Last updated at Posted at 2025-11-17

SubversionからGitへの移行ガイド

(トップページはこちら) - (Gitで始める効率的な開発ワークフロー)

1. 用語と概念の対応

SubversionとGitは、バージョン管理という目的は同じですが、設計思想が異なります。まず用語の対応を把握することで、混乱を避けられます。

1.1 基本操作の対応表

Subversion Git 備考
svn checkout URL git clone URL リポジトリ全体を取得
svn update git pull 最新の変更を取得してマージ
svn commit git commit + git push Gitは2段階
svn add git add 変更をステージング
svn status git status 作業ツリーの状態確認
svn log git log コミット履歴の確認
svn diff git diff 差分の確認
svn revert git restore / git checkout 変更の破棄
svn merge git merge ブランチのマージ

1.2 GUIツールの対応

Subversion Git 備考
TortoiseSVN TortoiseGit Windowsエクスプローラー統合型
- SourceTree クロスプラットフォーム
- GitKraken クロスプラットフォーム
- GitHub Desktop シンプルなGUI

TortoiseSVNユーザーにとって、TortoiseGitは操作感が似ているため、移行しやすいツールです。右クリックメニューからの操作という基本的なUIは共通しています。

1.3 リビジョン管理の違い

Subversion

  • リビジョン番号:r1, r2, r3...(連番)
  • 中央サーバーで一元管理
  • リビジョン番号でバージョンを特定

Git

  • コミットハッシュ:a1b2c3d...(SHA-1)
  • 分散管理
  • ハッシュ値でコミットを特定

コマンドライン

# Subversionでの履歴確認
svn log -r 1234

# Gitでの履歴確認
git log a1b2c3d
git log --oneline  # 短縮表示

TortoiseSVN / TortoiseGit

  • TortoiseSVN:フォルダを右クリック → 「TortoiseSVN」→「Show log」
  • TortoiseGit:フォルダを右クリック → 「TortoiseGit」→「Show log」

操作方法はほぼ同じですが、表示される識別子が異なります。

2. 重要な概念の違い

2.1 中央集権型と分散型

2.2 ステージングエリア(インデックス)

Gitには、Subversionにない「ステージングエリア」という概念があります。

Subversionの場合

コマンドライン:

# 編集したファイルは即座にコミット対象
svn commit -m "メッセージ"

TortoiseSVN:

  1. フォルダを右クリック
  2. 「SVN Commit...」を選択
  3. コミットするファイルを選択してコミット

Gitの場合

コマンドライン:

# ファイルを編集
# ステージング(コミット対象として登録)
git add file.c

# コミット(ローカルリポジトリに記録)
git commit -m "メッセージ"

# リモートに送信
git push origin main

TortoiseGit:

  1. フォルダを右クリック
  2. 「Git Commit -> "main"...」を選択
  3. コミットするファイルにチェックを入れる(これがステージング)
  4. コミットメッセージを入力して「Commit」ボタン
  5. 「Push」ボタンでリモートに送信

TortoiseGitでは、ファイルのチェックボックスがステージングに相当します。TortoiseSVNと似ていますが、コミット後にさらにプッシュが必要な点が異なります。

この仕組みにより、以下が可能になります。

  • 複数のファイルを編集しても、一部だけをコミットできる
  • コミット前に変更内容を整理できる
  • ファイルの一部分だけをコミットできる

3. 基本操作の実践

3.1 リポジトリの取得

3.1.1 コマンドライン

Subversion

svn checkout https://svn.example.com/repo/trunk myproject
cd myproject

Git

git clone https://git.example.com/repo.git
cd repo

3.1.2 GUIツール

TortoiseSVN

  1. 空のフォルダを作成
  2. フォルダを右クリック
  3. 「SVN Checkout...」を選択
  4. URLを入力して「OK」

TortoiseGit

  1. 空のフォルダを作成
  2. フォルダを右クリック
  3. 「Git Clone...」を選択
  4. URLを入力して「OK」

操作手順はほぼ同じです。

3.2 日常的な作業フロー

3.2.1 コマンドライン

Subversion

# 最新を取得
svn update

# ファイルを編集
vi src/main.c

# 状態確認
svn status

# コミット
svn commit -m "機能Aを追加"

Git

# 最新を取得
git pull origin main

# ファイルを編集
vi src/main.c

# 状態確認
git status

# 差分確認
git diff

# ステージング
git add src/main.c

# コミット(ローカル)
git commit -m "機能Aを追加"

# リモートに送信
git push origin main

3.2.2 GUIツール

TortoiseSVN

  1. フォルダを右クリック → 「SVN Update」で最新取得
  2. ファイルを編集
  3. フォルダを右クリック → 「SVN Commit...」
  4. コミットメッセージを入力して「OK」

TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Pull...」で最新取得
  2. ファイルを編集
  3. フォルダを右クリック → 「Git Commit -> "main"...」
  4. 変更したファイルにチェックを入れる
  5. コミットメッセージを入力して「Commit」
  6. 「Push」ボタンをクリック(またはコミット後に右クリック → 「TortoiseGit」→「Push...」)

TortoiseGitでは、コミットとプッシュが分かれている点に注意が必要です。

3.3 ブランチ操作

3.3.1 コマンドライン

Subversion

# ブランチ作成(ディレクトリのコピー)
svn copy https://svn.example.com/repo/trunk \
         https://svn.example.com/repo/branches/feature-a \
         -m "ブランチ作成"

# ブランチに切り替え
svn switch https://svn.example.com/repo/branches/feature-a

Git

# ブランチ作成と切り替え(瞬時に完了)
git checkout -b feature-a

# または、2段階で
git branch feature-a
git checkout feature-a

# ブランチ一覧
git branch

# リモートブランチを含めた一覧
git branch -a

3.3.2 GUIツール

TortoiseSVN

  1. フォルダを右クリック → 「TortoiseSVN」→「Branch/tag...」
  2. From URLとTo URLを指定してブランチ作成
  3. 別途「Switch...」でブランチに切り替え

TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Create Branch...」
  2. ブランチ名を入力
  3. 「Switch to new branch」にチェックを入れると、作成と同時に切り替え

TortoiseGitの方が操作が簡単です。Gitのブランチは、Subversionと違いディレクトリのコピーではなく、コミットへのポインタです。そのため、作成・切り替えが高速で、ストレージも消費しません。

3.4 マージ操作

3.4.1 コマンドライン

Subversion

# トランクに切り替え
svn switch https://svn.example.com/repo/trunk

# ブランチからマージ
svn merge https://svn.example.com/repo/branches/feature-a

# コミット
svn commit -m "feature-aをマージ"

Git

# mainブランチに切り替え
git checkout main

# 最新を取得
git pull origin main

# feature-aブランチをマージ
git merge feature-a

# リモートに送信
git push origin main

# 不要になったブランチを削除
git branch -d feature-a

3.4.2 GUIツール

TortoiseSVN

  1. トランクに切り替え(Switch...)
  2. フォルダを右クリック → 「TortoiseSVN」→「Merge...」
  3. マージ元のブランチURLを指定
  4. マージ実行
  5. コミット

TortoiseGit

  1. mainブランチに切り替え(Switch/Checkout...)
  2. フォルダを右クリック → 「TortoiseGit」→「Merge...」
  3. マージ元のブランチを選択
  4. 「OK」をクリック
  5. コミットとプッシュ

4. 履歴の確認と比較

4.1 ログの確認

4.1.1 コマンドライン

Subversion

# 基本的なログ
svn log

# リビジョン範囲を指定
svn log -r 100:200

# 詳細な差分付き
svn log -v -r 100

Git

# 基本的なログ
git log

# 簡潔な表示
git log --oneline

# グラフ表示
git log --graph --oneline --all

# 特定のファイルの履歴
git log src/main.c

# 最近の10件
git log -10

4.1.2 GUIツール

TortoiseSVN

  1. フォルダを右クリック → 「TortoiseSVN」→「Show log」
  2. リビジョン番号、作者、日時、コメントが一覧表示される
  3. リビジョンをダブルクリックで詳細確認

TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Show log」
  2. コミットハッシュ(短縮形)、作者、日時、コメントが一覧表示される
  3. グラフビューで視覚的にブランチ構造を確認可能
  4. コミットをダブルクリックで詳細確認

TortoiseGitのログビューには、ブランチのマージ関係を示すグラフが表示されます。これはTortoiseSVNにはない機能で、複雑なブランチ構造を理解するのに役立ちます。

4.2 差分の確認

4.2.1 コマンドライン

Subversion

# 作業コピーとBASEの差分
svn diff

# 特定リビジョン間の差分
svn diff -r 100:200

Git

# 作業ディレクトリとステージングエリアの差分
git diff

# ステージングエリアとHEADの差分
git diff --cached

# 特定のコミット間の差分
git diff a1b2c3d..d4e5f6g

# ブランチ間の差分
git diff main..feature-a

4.2.2 GUIツール

TortoiseSVN

  1. ファイルを右クリック → 「TortoiseSVN」→「Diff」
  2. 差分表示ツール(TortoiseMerge)が起動

TortoiseGit

  1. ファイルを右クリック → 「TortoiseGit」→「Diff」
  2. 差分表示ツール(TortoiseGitMerge)が起動
  3. または、Show logから2つのコミットを選択して「Compare revisions」

差分表示ツールの使い方は、TortoiseSVNとTortoiseGitでほぼ同じです。

5. コンフリクトの解決

5.1 コマンドライン

5.1.1 Subversion

svn update
# コンフリクトが発生

# ファイルを編集して解決
vi conflicted-file.c

# 解決を宣言
svn resolved conflicted-file.c

# コミット
svn commit -m "コンフリクトを解決"

5.1.2 Git

git pull origin main
# コンフリクトが発生

# コンフリクトしているファイルを確認
git status

# ファイルを編集して解決
vi conflicted-file.c

# 解決したファイルをステージング
git add conflicted-file.c

# コミット
git commit -m "コンフリクトを解決"

# リモートに送信
git push origin main

5.2 GUIツール

5.2.1 TortoiseSVN

  1. Update時にコンフリクトが発生
  2. コンフリクトしたファイルを右クリック → 「TortoiseSVN」→「Edit conflicts」
  3. TortoiseMergeが起動し、3ペイン表示(自分の変更、元の状態、他人の変更)
  4. 手動で解決を選択
  5. 保存後、「Mark as resolved」
  6. コミット

5.2.2 TortoiseGit

  1. Pull時にコンフリクトが発生
  2. コンフリクトしたファイルを右クリック → 「TortoiseGit」→「Resolve conflict」
  3. 解決方法を選択:
    • 「Edit conflicts」:TortoiseGitMergeで手動解決
    • 「Resolve using 'mine'」:自分の変更を採用
    • 「Resolve using 'theirs'」:相手の変更を採用
  4. 手動解決の場合、TortoiseGitMergeで編集
  5. 保存後、「Mark as resolved」
  6. コミットとプッシュ

解決の流れはTortoiseSVNとほぼ同じです。

コンフリクトマーカーは両方とも同じ形式です。

<<<<<<< HEAD
// 自分の変更
int result = calculate_new_way();
=======
// 他の人の変更
int result = calculate_old_way();
>>>>>>> branch-name

6. よくある操作の対応

6.1 ファイルの追加

6.1.1 コマンドライン

Subversion

vi new-file.c
svn add new-file.c
svn commit -m "新しいファイルを追加"

Git

vi new-file.c
git add new-file.c
git commit -m "新しいファイルを追加"
git push origin main

6.1.2 GUIツール

TortoiseSVN

  1. 新しいファイルを作成
  2. ファイルを右クリック → 「TortoiseSVN」→「Add...」
  3. フォルダを右クリック → 「SVN Commit...」

TortoiseGit

  1. 新しいファイルを作成
  2. フォルダを右クリック → 「Git Commit -> "main"...」
  3. 新しいファイルが自動的に表示される(チェックを入れる)
  4. コミットしてプッシュ

TortoiseGitでは、明示的な「Add」操作が不要な場合が多く、コミット時に新しいファイルが自動的にリストアップされます。

6.2 ファイルの削除

6.2.1 コマンドライン

Subversion

svn delete old-file.c
svn commit -m "不要なファイルを削除"

Git

git rm old-file.c
git commit -m "不要なファイルを削除"
git push origin main

6.2.2 GUIツール

TortoiseSVN

  1. ファイルを右クリック → 「TortoiseSVN」→「Delete」
  2. フォルダを右クリック → 「SVN Commit...」

TortoiseGit

  1. ファイルを右クリック → 「TortoiseGit」→「Delete and add to commit」
  2. または、通常の削除後、コミット時に削除として認識される
  3. コミットしてプッシュ

6.3 ファイルの移動・リネーム

6.3.1 コマンドライン

Subversion

svn move old-name.c new-name.c
svn commit -m "ファイル名を変更"

Git

git mv old-name.c new-name.c
git commit -m "ファイル名を変更"
git push origin main

6.3.2 GUIツール

TortoiseSVN

  1. ファイルを右クリック → 「TortoiseSVN」→「Rename...」
  2. 新しい名前を入力
  3. コミット

TortoiseGit

  1. ファイルを右クリック → 「TortoiseGit」→「Rename...」
  2. 新しい名前を入力
  3. コミットしてプッシュ

または、Windowsエクスプローラーで通常のリネームをしても、Gitが自動的に移動として認識します。

6.4 変更の取り消し

6.4.1 コマンドライン

Subversion

# 特定のファイルを元に戻す
svn revert modified-file.c

# すべてのファイルを元に戻す
svn revert -R .

Git

# 特定のファイルを元に戻す(ステージング前)
git restore modified-file.c

# 特定のファイルをステージングから外す
git restore --staged staged-file.c

# すべてのファイルを元に戻す
git restore .

6.4.2 GUIツール

TortoiseSVN

  1. ファイルを右クリック → 「TortoiseSVN」→「Revert...」
  2. 元に戻すファイルを選択して「OK」

TortoiseGit

  1. ファイルを右クリック → 「TortoiseGit」→「Revert...」
  2. 元に戻すファイルを選択して「OK」

操作方法は同じです。

7. タグ付け

7.1 コマンドライン

7.1.1 Subversion

# タグの作成(ディレクトリのコピー)
svn copy https://svn.example.com/repo/trunk \
         https://svn.example.com/repo/tags/release-1.0 \
         -m "バージョン1.0リリース"

7.1.2 Git

# 軽量タグの作成
git tag v1.0

# 注釈付きタグの作成(推奨)
git tag -a v1.0 -m "バージョン1.0リリース"

# タグ一覧
git tag

# タグをリモートに送信
git push origin v1.0

# すべてのタグを送信
git push origin --tags

7.2 GUIツール

7.2.1 TortoiseSVN

  1. フォルダを右クリック → 「TortoiseSVN」→「Branch/tag...」
  2. From URLにtrunkを指定
  3. To URLにtagsディレクトリ配下のパスを指定
  4. ログメッセージを入力して「OK」

7.2.2 TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Create Tag...」
  2. タグ名を入力(例:v1.0)
  3. メッセージを入力(注釈付きタグになります)
  4. 「OK」をクリック
  5. 右クリック → 「TortoiseGit」→「Push...」
  6. 「Push all tags」にチェックを入れてプッシュ

Gitのタグは、Subversionと違い特定のコミットへの参照です。ディレクトリのコピーではありません。

8. 移行時の注意点

8.1 .gitignoreファイル

Subversionのsvn:ignoreプロパティに相当するのが.gitignoreファイルです。

8.1.1 コマンドライン

svn:ignoreの確認

svn propget svn:ignore .

Gitでの設定

# .gitignoreファイルを作成
cat > .gitignore << EOF
*.o
*.so
*.a
build/
EOF

git add .gitignore
git commit -m ".gitignoreを追加"

8.1.2 GUIツール

TortoiseSVN

  1. フォルダを右クリック → 「TortoiseSVN」→「Properties」
  2. 「svn:ignore」プロパティを編集

TortoiseGit

  1. フォルダ内に.gitignoreファイルを作成
  2. テキストエディタで無視するパターンを記述
  3. コミット

または、TortoiseGitの設定ダイアログから:

  1. 無視したいファイルを右クリック → 「TortoiseGit」→「Add to ignore list」
  2. このリポジトリのみ、またはグローバルを選択

8.2 改行コードの扱い

Subversionではsvn:eol-styleプロパティで管理していました。Gitでは.gitattributesファイルで管理します。

8.2.1 コマンドライン

# .gitattributesファイルを作成
cat > .gitattributes << EOF
*.c text
*.h text
*.txt text
*.sh text eol=lf
*.bat text eol=crlf
EOF

git add .gitattributes
git commit -m ".gitattributesを追加"

8.2.2 GUIツール

TortoiseSVN

  1. ファイルを右クリック → 「TortoiseSVN」→「Properties」
  2. 「svn:eol-style」プロパティを設定(native、LF、CRLFなど)

TortoiseGit

  1. フォルダ内に.gitattributesファイルを作成
  2. テキストエディタで設定を記述
  3. コミット

8.3 大きなファイルの扱い

Subversionは大きなバイナリファイルを扱うのが得意でした。Gitは履歴全体をクローンするため、大きなファイルには不向きです。

対策として、Git LFS(Large File Storage)を使用します。

8.3.1 コマンドライン

# Git LFSのインストール(初回のみ)
git lfs install

# 大きなファイルを追跡
git lfs track "*.zip"
git lfs track "*.iso"

# .gitattributesが自動生成される
git add .gitattributes
git commit -m "Git LFSを設定"

8.3.2 GUIツール

TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Settings」
  2. 「Git」→「Git LFS」でLFSを有効化
  3. コマンドラインでgit lfs trackを実行(GUIからは設定不可)
  4. または、.gitattributesを直接編集

Git LFSの初期設定は、コマンドラインの方が簡単です。

9. リポジトリの変換

既存のSubversionリポジトリをGitに変換する場合、git svnコマンドを使用します。この作業はコマンドラインで行います。

9.1 基本的な変換

# Subversionリポジトリをクローン
git svn clone https://svn.example.com/repo/trunk myproject

# ディレクトリに移動
cd myproject

9.2 標準的なレイアウトの場合

trunk、branches、tagsの標準的なレイアウトの場合:

git svn clone -s https://svn.example.com/repo myproject

-sオプションは--stdlayoutの省略形で、trunk、branches、tagsを自動認識します。

9.3 作者情報のマッピング

SubversionのユーザーIDをGitの形式に変換します。

# authors.txtファイルを作成
cat > authors.txt << EOF
tanaka = 田中太郎 <tanaka@example.com>
sato = 佐藤花子 <sato@example.com>
suzuki = 鈴木次郎 <suzuki@example.com>
EOF

# 作者情報を指定してクローン
git svn clone -s --authors-file=authors.txt \
  https://svn.example.com/repo myproject

9.4 リモートリポジトリへの登録

# リモートリポジトリを追加
git remote add origin https://git.example.com/myproject.git

# プッシュ
git push -u origin main

変換後は、通常のGitリポジトリとして、TortoiseGitなどのGUIツールで操作できます。

10. TortoiseGit固有の便利機能

TortoiseSVNユーザーがTortoiseGitに移行する際、新しく使える便利な機能があります。

10.1 コミットグラフの可視化

TortoiseGitのログビューには、ブランチのマージ履歴を視覚的に表示するグラフ機能があります。

  1. フォルダを右クリック → 「TortoiseGit」→「Show log」
  2. 左側のグラフでブランチの分岐とマージが視覚化される
  3. 複雑なブランチ構造を理解しやすい

10.2 Stash機能

作業中の変更を一時的に退避する機能です。TortoiseSVNにはない機能です。

使用場面

  • 作業中に別のブランチに切り替える必要がある場合
  • 作業中に緊急のバグ修正が必要になった場合

コマンドライン

# 変更を一時退避
git stash

# 正しいブランチに切り替え
git checkout correct-branch

# 変更を復元
git stash pop

TortoiseGit

  1. フォルダを右クリック → 「TortoiseGit」→「Stash Save」
  2. 変更が退避される
  3. フォルダを右クリック → 「TortoiseGit」→「Switch/Checkout...」
  4. 正しいブランチに切り替え
  5. フォルダを右クリック → 「TortoiseGit」→「Stash Pop」

11. まとめ

SubversionからGitへの移行で押さえるべきポイント:

11.1 概念の違いを理解する

  • 中央集権型から分散型への変更
  • ステージングエリアという中間層
  • コミットが2段階(commit + push)

11.2 基本操作の対応を把握する

  • checkout → clone
  • update → pull
  • commit → commit + push

11.3 ブランチの扱いの違い

  • Gitではブランチが軽量
  • 頻繁な作成・削除が推奨される

11.4 移行ツールの活用

  • git svnでの変換
  • 作者情報のマッピング

11.5 段階的な移行

  • 小さなプロジェクトから開始
  • チーム全体で理解を深める

11.6 GUIツールの活用

  • TortoiseSVNユーザーはTortoiseGitへの移行がスムーズ
  • 基本的な操作感は似ている
  • コミット後のプッシュ操作に注意

11.7 コマンドラインとGUIの使い分け

  • 日常的な操作:GUIツールが便利
  • リポジトリ変換:コマンドラインのみ
  • 両方を理解することで柔軟に対応できる

技術的な観点から見ると、Gitは分散型の特性により、より柔軟で効率的な開発が可能になります。TortoiseSVNユーザーであれば、TortoiseGitを使用することで、操作の違いによる混乱を最小限に抑えられます。最初は操作の違いに戸惑うかもしれませんが、基本を押さえれば、Subversionと同様に使えるようになります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?