実用 Git 第3版

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
576
ISBN
978-4-8144-0061-4
原書
Version Control with Git, 3rd Edition
FORMAT
Print PDF EPUB
Ebook
4,620円
Ebookを購入する
Print
4,620円

Gitの包括的な解説書。本書ではVCS(バージョン管理システム)の使用経験があるソフトウェアエンジニアを対象に、分散型バージョン管理システム「Git」の使い方を、リポジトリの内部やブランチの状態を示す図を多用しながら丁寧に解説します。開発時によく使われるサブコマンドだけでなく、トラブルシューティング時に使用するサブコマンドも幅広く解説します。Gitのサブコマンドの使い方だけではなく、Gitリポジトリの内部構造についても解説するので、読者はGitをより深く理解できるようになるでしょう。

関連ファイル

目次

賞賛の声
監訳者まえがき
まえがき

第I部 Gitの思考法

1章 Git入門
    1.1 Gitのコンポーネント
    1.2 Gitの特徴
    1.3 Gitのコマンドライン
    1.4 gitコマンド入門
        1.4.1 Gitを使う前の準備
        1.4.2 ローカルリポジトリの操作
        1.4.3 共有リポジトリの操作
        1.4.4 設定ファイル
    1.5 まとめ

2章 基本コンセプト
    2.1 リポジトリ
        2.1.1 Gitオブジェクトストア
        2.1.2 インデックス
        2.1.3 コンテンツアドレッサブルデータベース
        2.1.4 Gitはコンテンツを追跡する
        2.1.5 パス名とコンテンツ
        2.1.6 パックファイル
    2.2 Gitオブジェクトストアの可視化
    2.3 Gitの内部動作:コンセプトはどのように機能しているか
        2.3.1 .gitディレクトリの内部
        2.3.2 ブロブオブジェクトとハッシュ
        2.3.3 ツリーオブジェクトとファイル
        2.3.4 GitがSHA-1を使っていることにはどのような意味があるか
        2.3.5 ツリーの階層
        2.3.6 コミットオブジェクト
        2.3.7 タグオブジェクト
    2.4 まとめ

第II部 Gitの基礎知識

3章 ブランチ
    3.1 Gitでブランチを使う理由
    3.2 ブランチングのガイドライン
        3.2.1 ブランチ名
        3.2.2 ブランチ名のべしべからず集
    3.3 ブランチの管理
        3.3.1 ブランチの使い方
        3.3.2 ブランチの作り方
        3.3.3 ブランチ名リストの表示
        3.3.4 ブランチとコミットの表示
        3.3.5 ブランチの切り替え(チェックアウト)
        3.3.6 別のブランチへの変更のマージ
        3.3.7 新ブランチの作成とチェックアウトの方法
        3.3.8 detached HEAD
        3.3.9 ブランチの削除
    3.4 まとめ

4章 コミット
    4.1 コミット:変更を記録する単位
    4.2 アトミックなチェンジセット
    4.3 コミットの識別方法
        4.3.1 絶対コミット名
        4.3.2 refとsymref
        4.3.3 相対コミット名
    4.4 コミット履歴
        4.4.1 以前のコミットの表示
        4.4.2 コミットグラフ
        4.4.3 コミット範囲
    4.5 まとめ

5章 ファイル管理とインデックス
    5.1 インデックスの重要性
    5.2 Gitにおけるファイルの分類
    5.3 git addの使い方
    5.4 git commitを使うときの注意
        5.4.1 git commit --allの使い方
        5.4.2 コミットログメッセージの作成
    5.5 git rmの使い方
    5.6 git mvの使い方
    5.7 名称変更の追跡についてのメモ
    5.8 .gitignoreファイル
    5.9 まとめ

6章 マージ
    6.1 マージの技術的な意味
    6.2 マージの例
        6.2.1 マージの準備
        6.2.2 2つのブランチのマージ
        6.2.3 コンフリクトのあるマージ
    6.3 マージコミットの解決方法
        6.3.1 コンフリクトを起こしているファイルの見つけ方
        6.3.2 コンフリクトの調べ方
        6.3.3 Gitのコンフリクト管理の方法
        6.3.4 コンフリクト解決の仕上げ
        6.3.5 マージの中止、取り消し
    6.4 マージ戦略
        6.4.1 縮退マージ
        6.4.2 通常のマージ
        6.4.3 特殊なマージ
        6.4.4 マージ戦略の指定方法
        6.4.5 マージドライバ
    6.5 Gitのマージに対する考え方
        6.5.1 マージとGitのオブジェクトモデル
        6.5.2 スカッシュマージ
        6.5.3 個々の変更を1つずつマージしていかないのはなぜか
    6.6 まとめ

7章 差分
    7.1 git diffコマンドの書式
    7.2 git diffの簡単な実行例
    7.3 git diffの出力の解釈方法
    7.4 git diffとコミット範囲
    7.5 パス制限をともなうgit diff
    7.6 Gitが差分を取り出す仕組み
    7.7 まとめ

第III部 中級レベルのスキル

8章 コミットの検索
    8.1 git bisectの使い方
    8.2 git blameの使い方
    8.3 つるはしの使い方
    8.4 まとめ

9章 コミットの書き換え
    9.1 コミット履歴書き換えの根拠
    9.2 履歴の書き換えについて注意すべきこと
    9.3 git revertの使い方
    9.4 HEADコミットの変更
    9.5 git resetの使い方
    9.6 git cherry-pickの使い方
    9.7 reset、revertとcheckoutの関係
    9.8 コミットのリベース
        9.8.1 git rebase -iの使い方
        9.8.2 リベースかマージか
    9.9 まとめ

10章 一時退避と参照ログ
    10.1 一時退避
        10.1.1 ユースケース:ワークフローの中断
        10.1.2 ユースケース:上流の変更による仕掛りの作業の更新
        10.1.3 ユースケース:一時退避した変更のブランチへのコンバージョン
    10.2 参照ログ
    10.3 まとめ

11章 リモートリポジトリ
    11.1 ①リポジトリの概念
        11.1.1 ベアリポジトリと開発リポジトリ
        11.1.2 リポジトリのクローン作成
        11.1.3 リモート
        11.1.4 追跡ブランチ
        11.1.5 ほかのリポジトリの参照
        11.1.6 リモートリポジトリの参照
        11.1.7 refspec
    11.2 ②リモートリポジトリの使用例
        11.2.1 権威リポジトリの作り方
        11.2.2 初期リポジトリでのoriginリモートの作り方
        11.2.3 自分のリポジトリでの開発
        11.2.4 ローカルの変更のプッシュ
        11.2.5 新しい開発者の追加
        11.2.6 リポジトリの更新内容の取得
    11.3 ③図で見るリモートリポジトリ開発サイクル
        11.3.1 リポジトリのクローン作成
        11.3.2 もう1つの履歴
        11.3.3 fast-forwardではないプッシュ
        11.3.4 もう1つの履歴のフェッチ
        11.3.5 履歴のマージ
        11.3.6 マージコンフリクト
        11.3.7 マージ後の履歴のプッシュ
    11.4 ④リモートの設定
        11.4.1 git remoteの使い方
        11.4.2 git configの使い方
        11.4.3 設定ファイルの直接編集
    11.5 ⑤追跡ブランチの操作
        11.5.1 追跡ブランチの作り方
        11.5.2 ブランチの前後関係
    11.6 リモートブランチの追加と削除
    11.7 ベアリポジトリとgit push
    11.8 まとめ

12章 リポジトリの管理
    12.1 リポジトリの公開
        12.1.1 アクセス制御のあるリポジトリ
        12.1.2 匿名で読み出せるリポジトリ
        12.1.3 匿名で書き込めるリポジトリ
    12.2 リポジトリの公開についてのアドバイス
    12.3 リポジトリの構造
        12.3.1 共有リポジトリ構造
        12.3.2 分散リポジトリの構造
    12.4 分散開発との折り合いのつけ方
        12.4.1 公開履歴の変更
        12.4.2 コミットと公開の分離
        12.4.3 正しい履歴は1つではない
    12.5 自分の位置の把握
        12.5.1 上流と下流の間の情報の流れ
        12.5.2 メンテナーと開発者という2つの役割
        12.5.3 メンテナーと開発者の間のやり取り
        12.5.4 役割の二重性
    12.6 複数のリポジトリの操作
        12.6.1 専用のワークスペース
        12.6.2 自分のリポジトリの出発点をどこに置くか
        12.6.3 上流リポジトリの変更
        12.6.4 複数の上流リポジトリの利用
        12.6.5 プロジェクトのフォーク
    12.7 まとめ

第IV部 上級レベルのスキル

13章 パッチ
    13.1 パッチを使う理由
    13.2 パッチの作り方
    13.3 パッチとトポロジカルソート
    13.4 パッチのメール送信
    13.5 パッチの適用
    13.6 パッチのエラーへの対処
    13.7 パッチとマージの違い
    13.8 まとめ

14章 フック
    14.1 フックのタイプ
    14.2 フックを使うことに関する注意
    14.3 フックのインストール
        14.3.1 フックの例
        14.3.2 独自フックの作り方
    14.4 使えるフックの種類
        14.4.1 コミット関連フック
        14.4.2 パッチ関連フック
        14.4.3 プッシュ関連フック
        14.4.4 その他のローカルリポジトリのフック
    14.5 フックすべきかせざるべきか
    14.6 まとめ

15章 サブモジュール
    15.1 gitlink
    15.2 サブモジュール
        15.2.1 サブモジュール導入の理由
        15.2.2 サブモジュールの操作
    15.3 サブモジュールと認証情報の再利用
    15.4 Gitサブツリー
        15.4.1 サブプロジェクトの追加
        15.4.2 サブプロジェクトの更新のプル
        15.4.3 スーパープロジェクトからのサブプロジェクトの変更
    15.5 GitサブモジュールとGitサブツリーの図による比較
    15.6 まとめ

16章 高度な操作
    16.1 ハンクの対話的なステージング
    16.2 git rev-listの活用法
        16.2.1 日付に基づくチェックアウト
        16.2.2 古いバージョンのファイルの入手
    16.3 迷子のコミットの復活
        16.3.1 git fsckコマンド
        16.3.2 迷子のコミットを再び到達可能にする方法
    16.4 git filter-repoの使い方
        16.4.1 git filter-repoの使用例
    16.5 まとめ

第V部 ヒントとコツ

17章 ヒントとコツとテクニック
    17.1 作業ディレクトリがダーティな状態での対話的なリベース
    17.2 ガベージコレクション
    17.3 コミットを修復し損なわないようにするためのヒント
    17.4 上流のリベースへの対処
    17.5 変更の概要の手軽な確認
    17.6 クリーンアップ
    17.7 git grepを使ったリポジトリの検索
    17.8 refの更新と削除
    17.9 移動したファイルのフォロー
    17.10 いつか来た道だけど…
    17.11 Gitへの移植
        17.11.1 Gitで管理されたリポジトリの移植
        17.11.2 Git以外のバージョン管理システムからの移植
        17.11.3 大規模なリポジトリの移植に関するメモ
    17.12 Git LFS
        17.12.1 Git LFS導入前後のリポジトリの違い
        17.12.2 Git LFSのインストール
        17.12.3 Git LFSによる巨大オブジェクトの追跡
        17.12.4 Git LFSの役に立つテクニック
        17.12.5 Git LFSを使っていない既存リポジトリからのコンバージョン
    17.13 まとめ

18章 GitとGitHub
    18.1 GitHubについて
    18.2 GitHubアカウントのタイプ
    18.3 GitエコシステムにおけるGitHubの位置
    18.4 GitHubでのリポジトリのホスティング
        18.4.1 リポジトリ画面
        18.4.2 コード画面
        18.4.3 イシュー
        18.4.4 プルリクエスト
    18.5 GitHubフロー
    18.6 GitHubでのマージコンフリクトの解決
    18.7 開発ワークフロー
    18.8 GitHubの機能の統合
    18.9 まとめ

付録A Gitの歴史
    A.1 Gitの誕生
    A.2 先行システム
    A.3 リリースの経緯
    A.4 Gitという名前の意味

付録B Gitのインストール方法
    B.1 Linuxのバイナリディストリビューションの利用
        B.1.1 Debian/Ubuntu
        B.1.2 その他のバイナリディストリビューション
    B.2 macOSへのGitのインストール
    B.3 WindowsへのGitのインストール
    B.4 ソースリリースの入手方法
    B.5 ソースリリースからのビルド、インストール

索引

コラム目次
    監訳補 Windowsでのサブコマンドのドキュメントの表示
    監訳補 git restoreによる削除したファイルの復元
    GUID
    SHA-1ハッシュ値は一意だと言えるのか
    ブランチとタグの違い
    ブランチ操作のための新しい実験的なコマンド
    マージされたブランチのベースブランチ情報
    集合演算としてのコミット範囲
    名称変更追跡が抱える問題
    監訳補 .gitignoreのパターンマッチの確認
    監訳補 誤った操作の取り消し
    複数のリモートリポジトリ
    サーバーという単語について
    ピアツーピアバックアップとしてのGit
    範囲に含まれるコミットの判定方法詳説
    濱野純によるフック概説
    Gitの日付解釈
    パッキングのヒューリスティクス
    監訳補 意図しない名前とメールアドレスの公開に注意
    監訳補 改行コードと文字エンコーディングに関する設定