Git: Gitとバージョン管理の概念入門

Gitは、世界で最も普及している分散型バージョン管理システムであり、チームでの共同作業を簡単かつ効率的に行えるようにします。

このチュートリアルは、経験のない初心者向けに作成されています。バージョン管理の基礎から始まり、チームでの共同作業にGitを自在に活用できるようになるまでを段階的に解説しています。

1. 学習内容



2. バージョン管理とは何か?

バージョン管理とは、ファイルの内容の変更を追跡し、将来特定のバージョンを復元できるようにするシステムです。

(1) なぜバージョン管理が必要なのでしょうか?

論文を書いているところを想像してみてください:

TEXT 📖 参照専用
Thesis-v1.doc          # First Edition
Thesis-v2.doc          # Some content has been revised.
Thesis-Final Version.doc       # My advisor said I still need to revise it.
Thesis-Final Version2.doc      # Made a few more changes
Thesis-I'll never change the layout.doc    # This really is the final version.
Thesis-I'll never change the layout2.doc   # All right,Still needs to be revised...

このアプローチの問題点は次のとおりです:

バージョン管理システムは、まさにこうした問題に対処するために開発されたものです。



3. バージョン管理の進化

(1) 3.1 ローカルでのバージョン管理

バージョン管理の最も初期の形態では、ファイルのすべてのバージョンをローカルに保存していました。

100%
graph TB
    A[Local Database<br/>v1, v2, v3] --> B[Workspace]

代表的なツール: RCS(リビジョン管理システム)

デメリット: 複数ユーザー間の共同作業に対応していない


(2) 3.2 集中型バージョン管理

データセットのすべてのバージョンは、1台のサーバーに保存されています。チームメンバーはサーバーからファイルを取得し、変更を加えた後、それをサーバーに送信して戻します。

100%
graph TB
    S[Central Server<br/>All Versions]
    S --> A[UserA]
    S --> B[UserB]
    S --> C[UserC]

代表的なツール: CVS、Subversion(SVN)、Perforce

メリット:

デメリット:


(3) 3.3 分散型バージョン管理

すべての開発者は、履歴全体を含む完全なバージョン管理リポジトリ(リポジトリ)を持っています。

100%
graph LR
    A[UserAWarehouse<br/>Complete History] <--> B[UserBWarehouse<br/>Complete History]
    B <--> C[UserCWarehouse<br/>Complete History]
    A <--> C

代表的なツール: Git、Mercurial、Bazaar

メリット:

デメリット:



4. Gitの誕生

(1) 4.1 Gitの起源

2005年、Linuxカーネル開発コミュニティにおいて、ある大きな出来事が起こりました:

Gitの設計目標:

  1. 速度:非常に高速でなければならない
  2. シンプルさ:デザインはシンプルで洗練されたものであるべきです
  3. 非線形開発のサポート:数千もの並列ブランチを扱える
  4. 完全分散型:すべての開発者が完全なリポジトリを保有している
  5. 大規模プロジェクトの効率的な運用:Linuxカーネルなど

ライナスは2005年4月、約2週間でGitの初期バージョンを完成させました。現在、Gitは世界で最も普及しているバージョン管理システムとなっています。

(2) 4.2 Gitの設計思想

Gitの設計には、いくつかの基本原則が反映されています:

スナップショット、差異ではない

他のシステム(SVNなど)は、ファイル間の変更点を保存します:

TEXT 📖 参照専用
v1: file.txt (Original Document)
v2: file.txt + diff1 (Storage Differences)
v3: file.txt + diff1 + diff2 (Cumulative Difference)

Git は、各コミットの完全なスナップショットを保存します:

TEXT 📖 参照専用
v1: file.txtA complete snapshot of
v2: file.txtA complete snapshot of
v3: file.txtA complete snapshot of

メリット:

ほぼすべての処理はローカルで実行されます

インターネット接続が必要なのは、プッシュおよびプル操作のみです。



5. Gitの基本概念

(1) 5.1 リポジトリ

リポジトリはGitの中核となる概念であり、以下を含みます:

100%
graph TB
    subgraph GitWarehouse
        R[Repository .git<br/>All Commit History<br/>All Branch Information]
        S[Buffer Stage<br/>Changes Ready to Be Submitted]
        W[Workspace Work<br/>Files Actually Edited]
    end
    W -->|git add| S
    S -->|git commit| R

(2) 5.2 コミット

コミットはGitの基本単位であり、以下の要素で構成されます:

TEXT 📖 参照専用
commit a1b2c3d4e5f6... (40Bit Hash)
Author: Zhang San <zhangsan@example.com>
Date:   2024-01-01 10:00:00

    Add User Login Functionality

(3) 5.3 ブランチ

ブランチとは、コミットへの可変ポインタのことです。Gitでブランチを作成するのは非常に軽量で、単に41バイトのファイル(40バイトのハッシュと1バイトの改行文字)を作成するだけです。

100%
graph LR
    C1[SubmitC1] --> C2[SubmitC2] --> C3[SubmitC3]
    main[mainBranch] --> C3
    feature[featureBranch] --> C3


6. Gitのユースケース

(1) 6.1 個人プロジェクト

(2) 6.2 チームワーク

(3) 6.3 オープンソースプロジェクト

(4) 6.4 継続的インテグレーション/継続的デプロイメント(CI/CD)



7. Git と他のバージョン管理システムとの比較

機能 Git SVN CVS
アーキテクチャ 分散型 集中型 集中型
オフラインでの作業 ✅ 完全対応 ❌ 未対応 ❌ 未対応
ブランチの作成 非常に高速 (O(1)) 遅い (ディレクトリのコピー) 未対応
保存方法 スナップショット 増分 増分
ネットワーク依存性 プッシュ/プルのみ すべての操作 すべての操作
災害復旧 高(1人あたりフルバックアップ) 低(サーバーに依存)

▶ サンプル:Gitの基本コマンド

BASH
# InitializationGitWarehouse
git init

# View Repository Status
git status

# Add a file to the staging area
git add .

# Submit Changes
git commit -m "Initial Submission"

# View commit history
git log

❓ よくある質問

Q GitとGitHubの関係はどのようなものですか?
A Gitはバージョン管理ツールであり、GitHubはGitを基盤としたコードホスティングプラットフォームです。Gitを「車」、GitHubを「駐車場」に例えると分かりやすいでしょう。Gitを使ってローカルでコードを管理し、それをGitHubにプッシュしてホスティングや共同作業を行うことができます。
Q なぜGitを学ぶべきなのでしょうか?
A Gitは業界標準となっています。開発者の95%がGitを使用しており、事実上すべてのオープンソースプロジェクトがGitで管理されています。Gitを学ばなければ、チームでの共同作業に参加したり、オープンソースプロジェクトに貢献したりすることはできません。
Q 分散型バージョン管理システムは、多くの容量を消費しますか?
A Gitは圧縮や重複排除の技術を採用しているため、ストレージ効率が非常に高いです。例えば、Linuxカーネルのコミット数は100万件以上ありますが、Gitリポジトリの容量はわずか1 GB程度です。
Q SVNは今でも使われていますか?
A 現在も使用していますが、利用頻度は年々減少しています。SVNは(ゲームのアセットなど)大容量のバイナリファイルの管理には適していますが、新規プロジェクトではGitの使用をお勧めします。

📖 まとめ


📝 練習問題

  1. 基本的な質問:「分散型バージョン管理」と「集中型バージョン管理」の違いを、自分の言葉で説明し、少なくとも3つのポイントを挙げてください。

  2. 応用問題:お住まいの地域の研究プロジェクトや企業を調査し、どのようなバージョン管理ツールを使用しているか、またなぜそのツールを選んだのかを調べてください。

  3. 課題:Gitの誕生の背景や設計思想について学ぶために、Gitに関するライナス・トーバルズ氏のオリジナルのメール(「Linus Torvalds Git メーリングリスト」で検索)を読んでください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%