夕蛙のなく頃に

データアナリストとして学んだことや趣味で勉強し始めたIoTをアウトプットする

「実用Git」を読みました

Gitの使い方のみを勉強してきた

今までのGitの学び方は以下の通りです。

  • 学生時代
  • 社会人になって
    • ケースに応じてどうコマンド打つかをまとめたブログ記事を都度参照
    • rebaseやreset等、普段変なことにならなければ困ることなし

開発バリバリという職種でもなく、またサブスキルとしてGitが必要になるので、腰を据えて学んだことがありませんでした。

ちょうど「実用Git」の本を入手したこともあり、体系立てて学んでみたくなった次第です。

本の概要

  • 1章 はじめに
  • 2章 Gitのインストール
  • 3章 Git入門
  • 4章 基本的なGitの概念
  • 5章 ファイル管理とインデックス
  • 6章 コミット
  • 7章 ブランチ
  • 8章 差分
  • 9章 マージ
  • 10章 コミットの変更
  • 11章 リモートリポジトリ
  • 12章 リポジトリの管理
  • 13章 パッチ
  • 14章 フック
  • 15章 プロジェクトの結合
  • 16章 GitとSubversionリポジトリの併用
  • 付録A Gitにおける日本語の利用
  • 付録B GitHub入門

4章がとにかくキモで、どういう仕組みで動いているのかを解説。それをもとにその後の章では各アクションで、どう動くのかを解説しています。

6.5時間ほどで読み終えました。

.gitディレクトリの中身が理解できるようになった

4,5,6章を読んだことで、Gitはファイルや差分をどう管理していて、addやcommitというアクションはなにをしているのかを理解することができました。

これが開発にプラスかはわかりませんが、開発思想やそれを実現する仕組みを知れたのは純粋に楽しかったです。

以下は自分用にぎゅっとまとめたメモです。

# 4章 基本的なGitの概念
- Gitのオブジェックトは4種類
    - ブロブ
    - ツリー
    - コミット
    - タグ
- ブロブとはファイルの内容から計算したSHA1ハッシュ値名で管理されるオブジェクト
ブロブはファイル名を気にしない。ファイル内容から計算されたSHA1ハッシュ値のみで管理されるので、全く別の環境で全く同じファイルが作られたらそれは同一と見なされる
- ツリーとはどのブロブがどこに存在するかを管理するオブジェクト。ツリーがツリーを参照することも可能
- コミットは、ツリーオブジェクト・作成者や時間・コミッター・コミットメッセージを保持する
- タグとは1つのコミットを参照するバージョンのようなもの

# 5章 ファイル管理とインデックス
- git addをすると、ファイルはブロブ化されて、.git/objectsに保存される
また作業ツリーが.git/indexに保存される
- git commitすると、.git/indexがツリーとなり.git/objectsに、コミットも.git/objectsに保存される
すなわち、インデックスのスナップショットをツリーとしてオブジェクト格納領域へ送る