今週のコーディング素振り(2018/5/15)

gitの仕組みを学習するために、引き続きgitのコマンドを実装してます。
今回は git hash-object -w を実装してみました。
このコマンドは git add の中で実行されている低レベルのコマンドです。
このコマンドを実行すると、ファイルに含まれるデータをgit のオブジェクトDB (.git/objects) に保存します。

gitのオブジェクトDBに書き込むために、内容をzlib圧縮するのは compless() メソッドで処理しています。
コンパイルしたプログラムを実行して、ファイルをオブジェクトDBに保存してみます。
% echo sample > sample.txt
% kotlin -classpath ../mygit/out/production/classes GitHashObjectWKt ./sample.txt ./.git/objects/d6
./.git/objects/d6/4a3d962e787834f9b43312cdcdb96ef357709a
% git cat-file -p d64a3d962e787834f9b43312cdcdb96ef357709a
sample

保存したデータを git cat-file -p で読み出すことができました。やった!
git hash-object -w を実装して得た知見:

  • オブジェクトDBの中身のファイルパーミッションはリードオンリーにセットされてる。一度作成されたオブジェクトは、内容が書き換えられることがないのでこうなってるんだとどっかに書いてました。
  • gitのオブジェクトDBのファイル名は、sha1ハッシュの値
  • gitのオブジェクトDBのファイルは、zlibで圧縮されてる。
  • Kotin, Javaでzlib圧縮するにはDeflaterを使う

今週は以上です。

関連記事

最近の記事 おすすめ記事
  1. 新人さん向けの品質についての読書会

  1. フロントエンドエンジニア 入社して2か月目で行ったこと

  2. エンジニアの転職サイト・エージェント経由と直接応募はどちらが有利?

  3. JavaでInterface型を何故使うのかのお話

カテゴリー

アーカイブ

検索


TOP
TOP