git objectを勉強するためのgit-object-trainerコマンド


git-object-trainerはgit objectを勉強するためのコマンドです。

git-object-trainerはあなたに磁器(porcelain)コマンド(add, commit, show, diff, checkout, tag, log, diff)の利用を禁止します。それらの代わりに配管(plumbing)コマンド(hash-object, cat-file, update-index, write-tree)を使うことを強制します。

git addなどを入力するとgit-object-trainerはどのようにgit addを配管コマンドで実現すれば良いのかを教えてくれます。

使い方

インストール

go get -u github.com/sonatard/git-object-trainer/

設定

.bash_profileにaliasの設定を追加してください。

.bash_profile
alias git=git-object-trainer

$ git add .
Error: Exec following commands instead of git add

Basic way
# 1. Create . objects
$ git hash-object -w .
[FILE-HASH-STRING]
# 3. Check created object
$ git cat-file -p [FILE-HASH-STRING]
[FILE STRINGS]
# 4. Add or update file to staging area
## 4.1 add
$ git update-index --add --cacheinfo 10644 [FILE-HASH-STRING] .
## 4.2 update
$ git update-index --cacheinfo 10644 [FILE-HASH-STRING] .
# 5. Create tree
$ git write-tree
[TREE-HASH-STRING]
Remember [TREE-HASH-STRING] for commit
# 6. Check tree object
$ git cat-file -p [TREE-HASH-STRING]
[PERMISSION] blob [HASH] .

Easy way. You need not to remember [FILE-HASH-STRING]
# 1. Create tree
$ git write-tree
[TREE-HASH-STRING]
Remember [TREE-HASH-STRING] for commit
# 2. Add or update file to staging area
## 4.1 add
$ git update-index --add .
## 4.2 update
$ git update-index  .
# 6. Check tree object
$ git cat-file -p [TREE-HASH-STRING]
[PERMISSION] blob [HASH] .

ジョークソフトですが、PRお待ちしています。現在引数周りの処理が適当です。

また現在packには未対応です。

ちなみに私は配管コマンドでadd,commit,checkoutはできるようになりました