firisu the shooter

プログラミング、Web開発について

縛りプレイで覚える Git ~完全版~

きっかけ

Web のどこか で Git 縛りプレイという記事を見た。

まとめると、branch, tag, remote, clone, pull コマンド禁止という縛りを入れて、git使うといい。(もちろん、.git/ を弄るのも禁止)

— 神速さん (@sinsoku_listy) 2012年7月14日

上記のような条件のもと、Git を使って内部動作のお勉強をするという面白い試みだ。

だがしかし

だが、ちょっと待って欲しい。賢明なる諸氏はこう思わなかっただろうか。

条件ゆるすぎじゃね? と。

Git には内部動作用のコマンド(Plumbing コマンド)というのがあるので、 どうせならそれのみを使った方がカッコイイんじゃないだろうか。

Pro Git Chapter.9 にも 「add や commit を使っていいのは小学生まで」って書いてあることだしね。

書いてないけど。

企画概要

という訳で、本企画では以下の条件で Git を使ってみる。

  • Porcelain コマンドは全部禁止
    • 例えば add, branch, checkout, clone, commit, diff, init, log, merge, pull, push, rebase, status, …
  • Plumbing コマンドは全部使用可
    • 例えば cat-file, hash-object, update-index, write-tree, …
  • .git/ 内部の直接編集はOK
    • そうしないと init や clone は実現できない

これなら縛りプレイに相応しい内容と言えるだろう。

進め方

Git のコマンドを一つずつ見ていって、 その内部動作をシェルスクリプトやLLを使って実現していくというスタイルを取る。

あらかじめネタを考えているわけでなく、Git について勉強しながら記事を書いていく。 なので執筆ペースは極めてゆっくりになると思う。

チャプター

  1. git init 編: .git/ を作る
  2. git add 編: インデックスを作る
  3. git commit 編: コミットしてみる

↑ここまでやったけど、記事にまとめるのが面倒・・・。

追記

当初 Plumbing コマンドと Porcelain コマンドを逆に書いていたので修正した。

  • Porcelain: ハイレベルでユーザフレンドリなコマンド
  • Plumbing: Git 実装当初から存在するローレベルなコマンド

今後間違えないようにメモしておく。

Comments