背景
幸いなことに、継続的にチーム開発に参加する機会を得ました。ボトムアップなアプローチとして、まずは ゼロから学ぶGit/GitHub を読み、 Git の基本を学び直しました。
本の感想
序盤から話が上手く、流石大学の先生だと思いながら読んでいました。 1 ページ目からパンチラインが凄いです。僕自身の文脈としては、一件目の読書記事にふさわしいかもしれません:
もし何かの間違いで、コードを開発しているのにバージョン管理システムを使っていない会社に入社してしまったら、すぐに逃げてほしい。その会社は効率の悪さを開発時間でカバーしており、あなたの時間を搾取している可能性が高い。
贅沢な解説も嬉しいです:
このように、サーバに必要なファイルを準備、および配置する一連の作業をデプロイ (deploy) と呼ぶ。
序盤から git rebase や git bisect を前面に出していた点が良かったです。デバッグの短いプログラマを良いプログラマとするのも金言。また最終章で blob, branch, commit, tree といった Git オブジェクトの概要を復習できて良かったです。
その他、興味・関心
技術習得という意味では、以下の項目に興味があります。適宜調べてみようと思います。
知りたいこと
- Git の内部的なオブジェクトモデルの把握
- スナップショット形式における容量削減について
- 差分保存形式との比較、メリットとデメリットについて
reflogとresetで復旧できること、できないことについて
- Rebase 時の conflict の解消について知る
- なぜ同じ conflict を繰り返し解消しなくてはならないのか
- スナップショット方式であるため?
- Jujutsu であれば発生しないのか
git rerereの使い方と信頼性について
- なぜ同じ conflict を繰り返し解消しなくてはならないのか
- モダンな Git コマンドに慣れる
- Unstaging (
git reset->git restore -S) - Detached HEAD (
git checkout->git switch -d)
- Unstaging (
- Git の設定関係
- Git Hooks の仕組みと git-secrets の導入
git push --force-with-leaseをデフォルトにする (または alias にする)--no-force-if-includesの方が安全なんですね
git pushを非同期実行にする (Magit における 実装 を調べる)- まあ
git push &で十分か?
- まあ
git clone時に URL スキームをhttps://からgit@github.com:に変更する
- チーム開発
- GitHub Actions 以外の CI 導入 (Circle CI など)
- Circle CI から GitHub Actions への移行検討
- ある PR に依存した別の PR の作成について
- Git LFS およびアセット管理について
- サーバ関係
- Force push 後など、サーバ上に dangling (?) commit が発生した場合の削除方法
- Git のローカルサーバの運用方法
- GitHub の複数アカウント所持の是非や運用方法
- GitHub とローカルマシンが連携した CI の導入
- Emacs の環境改善
- Magit の未使用の機能を使い込む
ediffの使い方を把握する- 3-way diff, マージ処理
smerge-mode以外に良いキーバインドがあれば習得する
- その他
origin/mainとorigin mainの違いを整理する@,HEAD{3}のような表記法を整理する:/がリポジトリのルートを指すのはどのような場合か整理する
まとめ
モダンな Git 入門書を読みました。本書が扱うトピックを元に、次に何を知るべきか明確になったと思います。また入門書とはいえ概ね既知の内容であったため、基礎知識が十分にあると思えて嬉しかったです。