スマートフォン用の表示で見るお腹.ヘッタ。関数型とかセキュリティとか勉強したい。objectを皆さんはご存知ですか。そもそもとしてgitをご存知であるか問題があるわけですが、まぁ親の顔よりgitのdiffをみた人もいるんと思うので知ってることにして話を進めます。initをしてホゲホゲすると生まれる.git/objectsを指しており、gitのコアの部分のデータストアのことを指します。このオブジェクトは大きく分けて三つの構成がされています。blobファイルデータを表現するtreeフォルダ構造を表現するcommittreeへの参照、コミットしたユーザーやタイムスタンプなどのスナップショットの表現それをラップしているのが僕らが普段扱うコマンドたち。objectを直接触るようなhash-objectなどのコマンド後者の方はあまり聞きませんが、今回はこれも用いて行なっていきます。何が何だかわからんって人もいるかもしれませんが、git使ったことあるならばなんとなく分かるんじゃないかなと思うのでつらつらと書いて行きます。サックっと見ていきましょう.git/objectsgitのデータは前述の通り、gitオブジェクトという形で.git/objectsの中に格納される。実際にコピってやってみよう。f#.git/objects/73/0c1bf1546ce745073e50572b64d951427b868c#.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a#.git/objects/2e/1206f177f168e9654bd0f803c3b79100308516中身を見てみると.git/objectsフォルダの中にファイルが3つできているのがわかると思う。objectの名前は40文字のhashがつけられていて、先頭の2文字がサブフォルダ名、残りの38文字をファイル名として1つのオブジェクトにつき一つのファイルに保存される。ちなみにこのobjectの名前はsha1で生成される。これではそれぞれどんなオブジェクトなのかわからない。object-pオプションでオブジェクトの中身を表示ができる。objectはファイルデータのスナップショットで、ファイル名などのメタ情報は含まれてない。objectへの参照、filenameを記録している。objectへの参照になる。objectには、トップレベルのtreeへの参照、commitしたユーザー情報、タイムスタンプ、commitメッセージが含まれる。ちなみに最初のcommitなので親commitがないが、2回目以降のコミットでは親commitへの参照も含まれる。ほんまか?って思うかもしれないので試しに見てみる。新しいファイルで新たにオブジェクトが生成されるか確認する。f#.git/objects/da/22367adec08f45e1f4c368361f7582159c9012#.git/objects/b4/7b491cb488426c0ea4c0b04bc0ac9609fb6cc0#.git/objects/73/0c1bf1546ce745073e50572b64d951427b868c#.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a#.git/objects/83/c7a922210527a3543ce0cfa9f1f63d9dce921b#.git/objects/2e/1206f177f168e9654bd0f803c3b79100308516確かに、以下のobjectが増えていることがわかる。cat-fileをする。commitこの場合、確かにparentと言う親commitが出来ていることがわかる。他に増えたobjectたちも確認してみよう。piyo.txttreeなのでファイル自体がやはり増えている。b47b#worldblobなのでファイルの中身が確かに出てきている。gitobjectが頑張ってることはわかった。objectを配管コマンドから直接いじって見たい気持ちになったりするわけである。initをして確かに初めにはないもないことを確認する。hash-objectと言う物を使う。これはobjectIDを計算してファイルからblobを作成するコマンドである。オプションがいくつか設定する必要があって、今回使うのは-w,--stdinと言う実際にobjectデータベースに書き込むオプションと標準入力からobjectを読み込むと言うものを指定する。ちなみに-wをつけないとただ単にIDを吐くだけになる。objectだけができた。下準備をする必要がある。update-indexと言うコマンドを使う。treeのファイル内容をindexに登録するコマンドである。これにもオプションをつける必要があり、Stageingしてるファイルに対してこれは実行されるので(と言うかファイルがないのでStageingする場所もない)--addオプションをつけて追加すること必要ある。このindexに追加するものはファイルではなくてobjectデータベースにあるので--cacheinfoオプションをつけて指定された情報をindexに直接挿入してやることになります。<path>と記述する必要がある。ちなみにだがこのmodeとはchmodなどと同じパーミッションの数値の値を指しています。644と同じですので通常の一般的な権限のファイルであることを意味します。逆に実行可能ファイルとかならば100755になります。objectに書き出すことができるようなった。write-treeコマンドで行う。test.txtこれによって作ることができた。commit確かにcommitが出来ました。やったぜ!終わりに私は今回NICT主催のSecHack365というのに参加しているんですが、計画性のなさが露呈して、開催期間中に記事を書く羽目になりました。ツライ....次は@Knom10さんです。challengeというものに参...2016-05-31セキュリティ・キャンプ全国大会2016の応募用紙を晒す(後編)自信がないなぁ。後編は選択問題についてです。»プロフィールid:taketarou2関数型とかセキュリティとか勉強したい。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事2020年にやりたいことを100個Quicheをnginxで利用するためにmac向けにbuildして見たwebsocketについて今日から始めるXDPと取り巻く環境について東京都八重洲口にある某メディア企業を退職しました月別アーカイブ参加グループプログラミングはてなブログをはじめよう!taketarou2さんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?はてなブログをはじめる(無料)はてなブログとはお腹.ヘッタ。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。