Git 道場のメモを残しておきたいのだけどとりあえずこっちにメモ

Readme.md とかで Github に放り込んでおけば良い気もしますがとりあえず以下にて。

基本

下記、Git Basics も良い資料です。

基本的なワークフローとしては

  1. リモートにあるリポジトリから clone する
  2. branch を作る (git checkout -b
  3. 必要な修正を加え、テストする
  4. コミットに盛り込みたい必要な変更をインデクスに登録 (git add)
  5. コミットを作る (git commit)
  6. リモートに盛り込む

という形になる。このうち 6. については具体的に以下のいくつかの方法がある。

  • master ブランチに merge して master ブランチをリモートにあるリポジトリに push する
  • master ブランチとの差分を取得してメンテナに送付し、merge してもらう

また、一度リモートのリポジトリから clone してくれば後は 2. から 6. の繰り返しとなることが多い。ただし Git 修行ではブランチを作成せずに直接 master に差分を盛り込んでも良いものとしますが、可能であれば master に直接、は避けてブランチを作って作業をする癖をつけておいた方が良いものと思われます。

Git 道場について

以下三点の実践がテーマの実習。

  • コミットメセジをしっかり書く
    • 稽古のなかではコミットメセジのみを介して会話をするという制限がある。
    • きちんと書かないと意思の疎通ができないことを稽古のなかで実感することも目的の一つ。
  • git pull --rebase を怖がらずにやる
    • rebase を使うことはそれほど怖くはない
    • rebase により歴史がわかりやすくなる
  • git pull との違いを実感する
    • merge と rebase の違いを実感する

merge 修行

  • Numbers というファイルをチームで編集
    • 楽しくはない行為ですが、型を尊重してくださひ
  • コミットに関する会話はしない
    • push のタイミングに関する会話は無問題
    • 最初は push のタイミングは順番を決めて実施した方が分かりやすい
  • コミットを作ってリモートのリポジトリに push する、を 5 回繰り返す
    • 一人が連続してコミットしないように
    • 早くコミットする、が目的ではないのでゆっくりやりましょう
Numbers ファイルについて

行の先頭に 1 から 10 の数値が書かれた 10 行のファイル

$ cat Numbers
1
2
3
4
5
6
7
8
9
10
$
  • コミット毎に自分が選んだ数字の後ろに適当な記号を追加/削除する
    • 衝突が発生しやすい、をこころがける
      • 他人が追加した記号を削除する、など
    • あまり沢山改変しない
    • 全ての情報を削除、などの激しい改変は最初は避けた方が良い
  • コミットメセジに自分が行なった改変に関する情報を記載する
    • コミット毎の改変内容については、このメセジのみでやりとりする事になるので注意する
    • チーム間ではコミットの改変内容についての会話や相談はなるべくしない
    • コミットオブジェクトだけで判断できるようにする
5 回繰り返す
  • 型を繰り返して体に覚えさせるのが目的
  • 流れを繰り返すことが重要であり、早くやれば良いというものではない
    • 自分のコミットが連続している、ということは敗北を意味します
    • git push の声かけ重要
    • 最初は順番を決めた方が分かりやすい

基本的なワークフローは以下です。

  • Numbers ファイルの編集
  • git add Numbers
  • git commit
  • git push origin master
    • push 失敗したら以下
    • git pull (origin master)
    • Numbers ファイルの編集 (conflict の解消)
    • git add Numbers
    • git commit (マージコミット)
    • git push origin master

また、衝突を解消する時に

  • git log --graph --pretty=oneline でローカルのコミットログが
  • git log --graph --pretty=oneline --remotes でリモートのコミットログが

確認できますので、それを見ながら衝突を解消しましょう。また、5 回繰り返しが終わった時点でもログの確認をしてみて下さい。

rebase 修行

今度は Numbers ファイルを修正しながら衝突を rebase で解消する型となります。こちらも 5 回繰り返しましょう。

基本的なワークフローは以下です (衝突発生時の対応のみ)。

  • git pull --rebase
  • Numbers ファイルの編集 (衝突の解消)
  • git add Numbers
  • git rebase --continue

commit を作らない、のがポイントです。ここでのチェックポイントは歴史が一直線になっていること、となります。merge していたら失敗ですのでやり直しましょう。

補足

実施してみて、の補足ですが

  • merge と rebase の違いについてはワークフローを含め、先に実例を確認した方が良いかもしれません
  • ローカルなリポジトリが壊れてしまった場合の know-how の蓄積が必要と思われる
  • 道場と型に関する解説もある程度必要と思われる
  • .gitconfig はある程度設定しておいた方が良いらしい
  • EDITOR な環境変数もきちんと設定しておくこと
  • 以下の型についても実施してみたい
    • branch を merge でまとめる時に conflict した時の対処
    • branch を rebase でまとめる時に conflict した時の対処
    • Github な型 (issue とか pull-reqeust など)

https://speakerdeck.com/u/ogawa/p/git なナニをパクリ気味のドキュメントですが、この下書きを整理してどこかに再利用可能な形で保存を、と考えてます。