RyのGitチュートリアル
Gitバージョン管理の包括的なガイド。ステージングやコミットといった基本的なワークフローから、インタラクティブリベース、リモートコラボレーション、およびGitのオブジェクトデータベースの内部構造まで、高度なトピックをカバーしています。
コース概要
📚 コンテンツ概要
基本的なワークフロー(ステージングやコミット)から、インタラクティブなリベース、リモートでの共同作業、およびGitのオブジェクトデータベースの内部構造までを網羅する、Gitバージョン管理の包括的ガイド。
コマンドからコア内部構造まで、世界で最も人気のあるバージョン管理システムをマスターしよう。
著者: Ryan Hodson
謝辞: 前書きに明記された謝辞は特にない。
🎯 学習目標
- ローカル、中央集権型、分散型バージョン管理システムを比較・対比する。
- リナックスカーネル用にGitが開発された歴史的背景を特定する。
- インストール確認、リポジトリ初期化、ファイル追跡を含む基本的なGit設定を行う。
- Gitリポジトリを初期化し、
.gitディレクトリの役割を識別する。 - グローバルユーザー設定を構成し、ステージングエリアを使ってプロジェクトファイルを追跡する。
- コミットを実行してプロジェクトのスナップショットを作成し、リポジトリの履歴を使って確認する。
- コミットIDを使って特定の過去のコミットに移動し、現在のプロジェクト状態に戻る。
- アノテーション付きタグを作成・管理し、安定したリリースバージョンを識別する。
git revertを使って特定のコミット済み変更を元に戻すが、履歴の透明性を維持する。- Git CLIを使ってブランチの識別・作成・切り替えを行う。
🔹 レッスン1: バージョン管理の歴史と基礎知識
概要: このレッスンでは、手動によるファイル管理から高度な分散型システムへと進化したバージョン管理の歴史をたどる。ローカル、中央集権型、分散型バージョン管理システム(VCS)のアーキテクチャ上の違いを詳細に説明し、リナックスカーネル向けにGitが生まれた具体的な歴史的背景も解説する。また、Gitのインストールと最初のリポジトリ初期化の基礎ステップも学習する。
学習成果:
- ローカル、中央集権型、分散型バージョン管理システムを比較・対比する。
- リナックスカーネル用にGitが開発された歴史的動機を特定する。
- インストール確認、リポジトリ初期化、ファイル追跡を含む基本的なGit設定を行う。
🔹 レッスン2: 基本の習得:ステージングとコミット
概要: このレッスンでは、標準的なプロジェクトフォルダからバージョン管理環境への移行という、Gitリポジトリの基礎ライフサイクルを扱う。リポジトリの初期化、ユーザーアイデンティティの設定、新規ファイルの追跡、変更のステージングエリアを通じた永続的なコミット履歴への移行について学ぶ。
学習成果:
- Gitリポジトリを初期化し、
.gitディレクトリの役割を識別する。 - グローバルユーザー設定を構成し、ステージングエリアを使ってプロジェクトファイルを追跡する。
- スナップショットを作成するためのコミットを実行し、リポジトリの履歴を使ってレビューする。
🔹 レッスン3: 変更の取り消しと履歴のナビゲーション
概要: このレッスンでは、リポジトリ内で「タイムトラベル」を行うために必要なGitのテクニックを扱う。開発者は過去の状態を検査し、マイルストーンをマークし、安全に誤りを修正できるようになる。学習者は、変更を永久的に残さずに古いリビジョンを表示する能力を身につけ、アノテーション付きタグを使ってリリースをラベル付けし、コミット済みの履歴を戻すことと、未コミットの実験的作業をクリアすることの違いを区別できるようになる。
学習成果:
- コミットIDを使って特定の過去のコミットに移動し、現在のプロジェクト状態に戻る。
- 安定したリリースバージョンを識別するためにアノテーション付きタグを作成・管理する。
git revertを使って特定のコミット済み変更を元に戻すが、履歴の透明性を維持する。
🔹 レッスン4: 重要なブランチと基本的なマージ
概要: このレッスンでは、Gitブランチの基本的なライフサイクルを扱い、独立した開発ラインとしてのブランチの概念から実際の実行までをカバーする。学生はブランチの作成・移動・可視化を行い、ファストフォワードマージと3ウェイマージを用いた作業の統合、そして一時ブランチの後処理を学ぶ。
学習成果:
- Git CLIを使ってブランチの識別・作成・切り替えを行う。
- フォークされたプロジェクト履歴図を解釈し、
masterブランチと機能ブランチの関係を理解する。 - 「ファストフォワード」マージと「3ウェイ」マージの実行と区別を行う。
🔹 レッスン5: 高度なブランチとマージ競合の解決
概要: このレッスンでは、分岐したプロジェクト履歴によって必要となる高度なGit操作を扱う。3ウェイマージの理論的なメカニズム、-aフラグを使った簡略化されたコミット、長期運用の機能ブランチの管理について学ぶ。学生は複雑なブランチ間の相互作用をナビゲートし、手動でのマージ競合を解決し、適切なブランチのクリーンアップを通じてリポジトリの健全性を維持できるようになる。
学習成果:
- ファストフォワードマージと3ウェイマージの構造上の違いを説明する。
-aフラグを使って、追跡済みファイルのステージングとコミットを同時に実行する。- Gitの競合マーカーを解釈して、マージ競合を識別・解決する。
🔹 レッスン6: 線形のプロジェクト履歴を維持するリベース
概要: このレッスンでは、コミットを移動・圧縮することで、綺麗で線形的なプロジェクト履歴を維持するための技術を扱う。学習者は、標準的なリベース、インタラクティブリベース(スクワッシュ)、およびプロセス中に特定のコミットを編集する機能を使い、分岐したブランチから統一されたタイムラインへと移行するスキルを習得する。このモジュール終了時には、不要なマージコミットを排除し、プロフェッショナルで洗練されたコミットログを提示する方法を理解している。
学習成果:
- 特徴ブランチのベースを他のブランチの先頭に移動させ、ファストフォワードマージを可能にする。
- インタラクティブリベースを使って、複数の小さなコミットを1つの意味あるスナップショットに圧縮(スクワッシュ)する。
- リベース中に
editおよび--amend機能を使って既存のコミットを編集する。
🔹 レッスン7: 履歴の再書き込みとReflogの安全性
概要: このレッスンでは、整然としたプロフェッショナルなプロジェクト履歴を維持するための高度なGitテクニックを扱う。学習者は「インタラクティブリベース」を使って過去のコミットを再書き込みし、汎用的なコミットを細分化する正確なワークフローを学び、また「Reflog」を強力な安全網として活用し、見かけ上失われたデータを復元できるようになる。
学習成果:
- インタラクティブリベースを使って、過去のコミットを編集・変更・分割する。
git reset --mixedを使って、単一の汎用コミットを複数の独立した意味のあるコミットに分解する。- Git Reflogをナビゲートし、「デタッチされたコミット」(ブランチに接続されていない)を識別し、復元する。
🔹 レッスン8: プッシュとフェッチによる共同作業
概要: このレッスンでは、複数ユーザーによるGitでの共同作業の基本的なワークフローを扱う。独自のリポジトリクローンの作成、異なるユーザーをシミュレートするためのローカルアイデンティティの設定、コードのやり取りのために「リモート」接続の確立について学ぶ。このレッスンでは、リポジトリ間でデータを取得(フェッチ)したり送信(プッシュ)したりする仕組みに焦点を当てる。
学習成果:
- クローンと設定: リポジトリを正しく複製し、ローカルレベルのユーザー設定を構成する。
- リモートの同期: リモートブックマークを追加し、
fetchとmergeを使って他の開発者の変更を統合する。 - リモート状態の管理: リモートブランチをナビゲートし、非ローカルコードを検査する際の「デタッチされたHEAD」状態を理解する。
🔹 レッスン9: 中央集権型共有リポジトリモデル
概要: このレッスンでは、ピアツピアのリポジトリ共有から中央集権型ワークフローへの移行を扱う。学生は「ベア」リポジトリを創設し、通信ハブとして機能させる方法、チーム環境向けにリモートを再構成する方法、複数の開発者間での変更の同期(プッシュとプル)を管理し、一貫したプロジェクト履歴を維持する方法を学ぶ。
学習成果:
- 中央サーバーとして機能するべく、ベアリポジトリを初期化・構成する。
- リモート接続を管理し、ローカルワークフローを中央ハブに向け直す。
- 標準化されたワークフローで共有コンテンツを更新し、
fetch、rebase、mergeを使って分岐した履歴を解決する。
🔹 レッスン10: 分散型インテグレーターモデル
概要: このレッスンでは、中央集権型バージョン管理から、ビットバケットをホスティングプロバイダーとして利用した分散型インテグレーターモデルへの移行を扱う。学習者は、公開リポジトリの設定から始まり、パブリックリポジトリからのペア開発者の貢献を「インテグレーター」がレビューし、公式プロジェクトバージョンにマージする高度なワークフローを管理するようになる。
学習成果:
- ビットバケットアカウントを設定し、分散型共同作業用の公開リモートリポジトリを構築する。
- 複数のリモートを管理して、外部貢献をフェッチ・レビュー・マージする「インテグレーターワークフロー」を実行する。
- チーム内の開発者間で、プライベートなローカル環境とパブリックなリポジトリとの間で同期を維持する。
🔹 レッスン11: パッチベースのコミュニケーションとワークフロー
概要: このレッスンでは、中央リポジトリへの共有アクセスなしに個々のコミットを共有する方法であるパッチベースの共同作業のライフサイクルを扱う。学生は、ローカルコミットからパッチファイルを生成し、メール経由で配布し、受信したパッチをメインブランチに統合する方法を学ぶ。
学習成果:
git format-patchを使って、特定のコミットやブランチから個別のパッチファイルを生成する。git amコマンドと標準入力リダイレクトを使って、外部のパッチファイルをローカルリポジトリに適用する。- 一連の統合ワークフローを実行する:一時ブランチでパッチをテストし、それをマスターブランチにマージする。
🔹 レッスン12: Gitユーティリティ、フック、高度な差分
概要: このレッスンでは、高度なリポジトリ管理に必要なGitユーティリティコマンドとカスタマイズ技術を扱う。学生は、アーカイブとバンドルを使用したリポジトリのエクスポートと共有、.gitignoreとスタッシュを使って清潔なワークスペースを維持する方法、Gitフック内に自動化スクリプトを実装する方法、高度な差分比較とカスタムエイリアスを使ってコマンドライン体験を最適化する方法を学ぶ。
学習成果:
- 歴史情報を保持しないアーカイブ(no history)と完全な履歴を保持するバンドル(full history)の違いを区別し、それぞれを実行する。
- ファイル除外パターンを構成し、一時的な作業中の変更を管理する。
- Gitの内部フックシステム内に自動化スクリプトを実装し、設定エイリアスを使ってワークフローを効率化する。
🔹 レッスン13: Gitプラミング:内部オブジェクトデータベース
概要: このレッスンでは、使いやすい「ポーラス」コマンドの下にある、低レベルの「プラミング」—つまり、Gitの内部オブジェクトデータベースを深掘りする。学習者は、4種類の異なるオブジェクトタイプ(ブロブ、ツリー、コミット、タグ)とSHA-1チェックサムを使ってプロジェクト履歴を記録する方法を学ぶ。このモジュール終了時には、通常の高レベルインターフェースを使わずに、インデックスとオブジェクトデータベースを直接操作してコミットを作成する方法を理解している。
学習成果:
- ブロブ、ツリー、コミット、タグの4つのGitオブジェクトタイプを定義し、区別する。
- HEADとブランチ参照が特定のコミットオブジェクトを指す役割を説明する。
- 「プラミング」ワークフローを実証する:手動でファイルをステージングし、ツリーを書き出し、コミットオブジェクトを作成する。