実用 Git

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
372
ISBN
978-4-87311-440-8
原書
Version Control with Git
FORMAT
PDF

オープンソースの分散バージョン管理システム「Git」の解説書。Gitには、開発および共同作業を進めるうえで便利な機能が数多く実装されています。しかし、その柔軟性の高さが原因でGitをどのように使うのが最も効率的か十分に理解していないユーザーが多いのも事実です。本書ではGitを使ってソフトウェアの開発プロジェクトを追跡、マージ、管理する方法をステップバイステップで明解かつ丁寧に解説します。読者はGitが持つ多くの機能を効率よく使えるようになるでしょう。日本語版では、Gitで日本語を利用する方法、Gitベースの開発プロジェクト用ホスティングサービスであるGitHubについての解説を加筆しました。

目次

目次

監訳者まえがき
まえがき

1章 はじめに
    1.1 背景
    1.2 Gitの誕生
    1.3 Git以前の事例
    1.4 Gitの歴史
    1.5 名前に含まれた意味

2章 Gitのインストール
    2.1 Linuxのバイナリでの配布
        2.1.1 DebianまたはUbuntu
        2.1.2 その他のバイナリ配布
    2.2 ソースリリースの入手
    2.3 ビルドとインストール
    2.4 WindowsでのGitのインストール
        2.4.1 CygwinのGitパッケージをインストールする
        2.4.2 スタンドアロンなGit(msysGit)のインストール

3章 Git入門
    3.1 Gitのコマンドライン
    3.2 早わかりGit
        3.2.1 初期状態のリポジトリを作成する
        3.2.2 ファイルをリポジトリに加える
        3.2.3 コミット作成者を設定する
        3.2.4 さらにコミットする
        3.2.5 コミットを見る
        3.2.6 コミットの差分を見る
        3.2.7 リポジトリ内のファイルを削除したり名前を変える
        3.2.8 リポジトリのコピーを作る
    3.3 設定ファイル
        3.3.1 エイリアスを設定する
    3.4 疑問点

4章 基本的なGitの概念
    4.1 基本概念
        4.1.1 リポジトリ
        4.1.2 Gitのオブジェクトの種類
        4.1.3 インデックス
        4.1.4 内容参照可能な名前
        4.1.5 Gitは内容を追跡する
        4.1.6 ファイルのパスと内容
    4.2 オブジェクト格納領域の図示
    4.3 Gitの動作概念
        4.3.1 .gitディレクトリの内部
        4.3.2 オブジェクト、ハッシュ値、ブロブ
        4.3.3 ファイルとツリー
        4.3.4 GitにおけるSHA1の使用について
        4.3.5 ツリーの階層
        4.3.6 コミット
        4.3.7 タグ

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 Gitのオブジェクトモデルとファイルの詳細

6章 コミット
    6.1 アトミックなチェンジセット
    6.2 コミットの識別
        6.2.1 コミットの絶対名
        6.2.2 参照とシンボリック参照
        6.2.3 相対的なコミット名
    6.3 コミット履歴
        6.3.1 古いコミットの表示
        6.3.2 コミットグラフ
        6.3.3 コミット範囲
    6.4 コミットを見つける
        6.4.1 git bisectを使う
        6.4.2 git blameを使う
        6.4.3 つるはしを使う

7章 ブランチ
    7.1 ブランチを使う理由
    7.2 ブランチ名
        7.2.1 ブランチ名のべし、べからず集
    7.3 ブランチの利用
    7.4 ブランチの作成
    7.5 ブランチ名の一覧
    7.6 ブランチの表示
    7.7 ブランチのチェックアウト
        7.7.1 ブランチをチェックアウトする基本的な例
        7.7.2 コミット前の変更がある場合のチェックアウト
        7.7.3 変更を異なるブランチにマージする
        7.7.4 新しいブランチの作成とチェックアウト
        7.7.5 切り離されたHEADのブランチ
    7.8 ブランチの削除

8章 差分
    8.1 git diffコマンドの形式
    8.2 git diffの簡単な例
    8.3 git diffとコミット範囲
    8.4 パス制限を用いたgit diff
    8.5 SubversionとGitのdiffの導出方法を比較する

9章 マージ
    9.1 マージの例
        9.1.1 マージの準備
        9.1.2 2つのブランチのマージ
        9.1.3 競合を伴うマージ
    9.2 マージ競合への対処
        9.2.1 競合ファイルを見つける
        9.2.2 競合の調査
        9.2.3 Gitの競合追跡方法
        9.2.4 競合解決を完了する
        9.2.5 マージの中断と再開
    9.3 マージ戦略
        9.3.1 縮退マージ
        9.3.2 通常マージ
        9.3.3 特殊なマージ
        9.3.4 マージ戦略の適用
        9.3.5 マージドライバ
    9.4 Gitはマージをどうみなすのか
        9.4.1 マージとGitオブジェクトモデル
        9.4.2 スカッシュマージ
        9.4.3 なぜ個々の変更を1つずつマージしないのか

10章 コミットの変更
    10.1 履歴変更に関する注意
    10.2 git reset の利用
    10.3 git cherry-pickの利用
    10.4 git revertの利用
    10.5 reset、revert、checkoutコマンドの違い
    10.6 先頭コミットの変更
    10.7 コミットのリベース
        10.7.1 git rebase -iを使う
        10.7.2 リベース対マージ

11章 リモートリポジトリ
    11.1 リポジトリの概念
        11.1.1 ベアリポジトリと開発リポジトリ
        11.1.2 リポジトリのクローン
        11.1.3 リモート
        11.1.4 追跡ブランチ
    11.2 他のリポジトリを参照する
        11.2.1 リモートリポジトリを参照する
        11.2.2 refspec
    11.3 リモートリポジトリの使用例
        11.3.1 権威あるリポジトリの作成
        11.3.2 自分用のoriginリモートの作成
        11.3.3 リポジトリでの開発
        11.3.4 変更のプッシュ
        11.3.5 新しい開発者の追加
        11.3.6 リポジトリの更新内容の取得
    11.4 リモートリポジトリ操作の図解
        11.4.1 リポジトリのクローン作成
        11.4.2 代替履歴
        11.4.3 fast-forwardではないプッシュ
        11.4.4 代替履歴のフェッチ
        11.4.5 履歴のマージ
        11.4.6 マージ競合
        11.4.7 マージされた履歴のプッシュ
    11.5 リモートブランチの追加と削除
    11.6 リモートの設定
        11.6.1 git remote
        11.6.2 git config
        11.6.3 手作業での編集
    11.7 ベアリポジトリとgit push
    11.8 リポジトリの公開
        11.8.1 アクセス制御付きのリポジトリ
        11.8.2 匿名読み取りアクセス付きのリポジトリ
        11.8.3 匿名書き込みアクセス付きのリポジトリ

12章 リポジトリの管理
    12.1 リポジトリの構造
        12.1.1 共有リポジトリの構造
        12.1.2 分散リポジトリの構造
        12.1.3 リポジトリ構造の例
    12.2 分散開発との付き合い方
        12.2.1 公開履歴の変更
        12.2.2 コミットと公開の分離
        12.2.3 本物の履歴は1つではない
    12.3 自分の位置を知る
        12.3.1 上流と下流の流れ
        12.3.2 メンテナーと開発者の役割
        12.3.3 メンテナーと開発者のやり取り
        12.3.4 役割の二重性
    12.4 複数のリポジトリでの作業
        12.4.1 自分自身の作業空間
        12.4.2 どこからリポジトリを開始するか
        12.4.3 異なる上流リポジトリへの変換
        12.4.4 複数の上流リポジトリの使用
        12.4.5 プロジェクトのフォーク

13章 パッチ
    13.1 なぜパッチを使用するのか
    13.2 パッチの生成
        13.2.1 パッチとトポロジカルソート
    13.3 パッチのメール送信
    13.4 パッチの適用
    13.5 悪いパッチ
    13.6 パッチ対マージ

14章 フック
    14.1 フックのインストール
        14.1.1 フックの用例
        14.1.2 初めてのフックの作成
    14.2 利用可能なフック
        14.2.1 コミットに関連したフック
        14.2.2 パッチに関連したフック
        14.2.3 プッシュに関連したフック
        14.2.4 その他のローカルリポジトリのフック

15章 プロジェクトの結合
    15.1 古い解決策: 部分チェックアウト
    15.2 明白な解決策: コードのプロジェクトへのインポート
        15.2.1 コピーを使ってサブプロジェクトをインポートする
        15.2.2 git pull -s subtreeでサブプロジェクトをインポートする
        15.2.3 変更を上流に提出する
    15.3 自動化された解決策: カスタムスクリプトを使ったサブプロジェクトの
 チェックアウト
    15.4 Git本来の解決策: gitlinkとgit submodule
        15.4.1 gitlink
        15.4.2 git submoduleコマンド

16章 GitとSubversionリポジトリの併用
    16.1 例: 単一のブランチの浅いクローン
        16.1.1 Gitにおける変更
        16.1.2 コミット前のフェッチ
        16.1.3 git svn rebaseによるコミット
    16.2 git svnによるプッシュ、プル、ブランチ、マージ
        16.2.1 コミットIDをまっすぐに保つ
        16.2.2 すべてのブランチのクローン
        16.2.3 リポジトリの共有
        16.2.4 Subversionへのマージの書き戻し
    16.3 Subversionと一緒に作業する場合のその他の留意点
        16.3.1 svn:ignore対.gitignore
        16.3.2 git-svnキャッシュの再構築

付録A Gitにおける日本語の利用
    A.1 ファイルの内容
    A.2 ファイル名
    A.3 コミットメッセージ

付録B GitHub入門
    B.1 はじめに
        B.1.1 GitHubとは
        B.1.2 オープンソースソフトウェア開発への影響
    B.2 GitHubの始め方
        B.2.1 アカウントの作成
        B.2.2 プロジェクトの登録
    B.3 GitHubの各種機能
        B.3.1 Gitリポジトリ
        B.3.2 SNS
        B.3.3 Wiki
        B.3.4 Issueトラッキング
        B.3.5 グラフ機能
    B.4 GitHub以外の選択肢
    B.5 まとめ
    B.6 参考文献

索引