Posted at

Git 「配管」コマンド 'hash-object' の例

この記事では「配管」コマンドと呼ばれる Git の基礎的なコマンドについて、簡単にまとめます。

各例において、「*入力」の下に記載されたコマンドを実行する直前のワークツリーの状態は下の PROJECT/ の状態と同じです。

.git/ フォルダーの内容は '$ git init' で初期化した状態のままです。


PROJECT/

PROJECT/

├ file1.txt
├ file2.txt
├ folder1/
│ ├ file3.txt
│ └ file4.txt
└ .git/


file1.txt

text 1



file2.txt

text 2



file3.txt

text 3



file4.txt

text 4



<file>...

<file>... は hash-object コマンドによって、blob オブジェクト(など)を作成するファイルを指定します。

blob オブジェクトはファイルの内容によって、名称・その他が決まります。ファイル名は考慮されません。


例1

*入力

$ git hash-object file1.txt

*出力
a118c4fd81877803e4becf8fbf49642edc9ac688

*.git/objects
[空です]

*staging area
[空です]


b59c62... の中身は file1.txt の中身である 'text 1' に加えて、このオブジェクトが blob であるということと、中身の文字列の長さが記録されています。


例2

*入力

$ git hash-object folder/file3.txt

*出力
b59c624beffc60a2515e185224926c338ebe674b

*.git/objects
[空です]

*staging area
[空です]


フォルダー名/ファイル名とすることもできます。


例3

*入力

$ git hash-object file1.txt folder/file3.txt

*出力
a118c4fd81877803e4becf8fbf49642edc9ac688
b59c624beffc60a2515e185224926c338ebe674b

*.git/objects
[空です]

*staging area
[空です]


複数のファイルを指定することもできます。


--stdin

--stdin をコマンドに含むことで、標準入力の内容から blob オブジェクト(など)を作成します。


例1

*入力

$ echo 'test' | git hash-object --stdin

*出力
9daeafb9864cf43055ae93beb0afd6c7d144bfa4

*.git/objects
[空です]

*staging area
[空です]


標準入力の内容は上記のように git コマンドに渡します。


例2

*入力

$ echo 'test' | git hash-object --stdin file1.txt

*出力
9daeafb9864cf43055ae93beb0afd6c7d144bfa4
a118c4fd81877803e4becf8fbf49642edc9ac688

*.git/objects
[空です]

*staging area
[空です]


同時にファイル名を指定すると、blob オブジェクト(など)が複数作成されます。


-w

-w をコマンドに含むことで、作成した blob オブジェクト(など)を .git/objects フォルダに保存します。

※出力には、以下のような文字列も含まれますが、文字数が徒に増えてしまうので、それを省略します。

'warning: LF will be replaced by CRLF in file1.txt.

The file will have its original line endings in your working directory'



*入力

$ git hash-object -w file1.txt file2.txt

*出力
a118c4fd81877803e4becf8fbf49642edc9ac688
e263913fb333115e7f9e5b6b7a38434ca5391d27

*.git/objects
a1/18c4fd81877803e4becf8fbf49642edc9ac688
e2/63913fb333115e7f9e5b6b7a38434ca5391d27

*staging area
[空です]


blob オブジェクトの名称の最初の2文字がフォルダー名に、残りの38文字がファイル名になります。