2
0

Git 学習記録

Last updated at Posted at 2024-03-07

Gitとは

Gitがファイルのバージョン管理をするため、効率的に開発を進めることができる

変更記録はスナップショットとして保存される

スナップショットで変更を記録することにより、差分を計算する手順が省かれ、マージする際に計算をせず、ブランチをマージすることができる
よって、開発の効率があがる

変更記録を差分で確認する際は、計算をする必要がある
https://gihyo.jp/dev/column/01/prog/2011/diff_sd200906

利点
バージョンを記録することにより、以前の状態の戻すことができる
バージョンを記録する際に、コミットをするため、コミットを辿ることで、以前のバージョンに戻すことできる

git add

1.git add コマンド実行後にGitオブジェクトが作成される
Gitオブジェクトは.git/object配下のディレクトリに保存される
Gitオブジェクトとは、blobオブジェクト、treeオブジェクト、commitオブジェクトなどが当たる

blobオブジェクト
git addしたファイルの中身ヘッダーとファイルの内容を、SHA1というハッシュ関数で40文字の英数字に変換したオブジェクトのこと
ハッシュIDのうち、最初の2文字をサブディレクトリとして、残りの38文字をオブジェクト名として保存する

#blobオブジェクトを確認
$ find .git/objects -type f
.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391

#ステージングされたハッシュIDを表示します
$ git hash-object test/test
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

#.git以下のファイル構造を表示する
--snip--
 tree .git
|-- objects
|   |-- e6
|   |   `-- 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
--snip--

$ git ls-files --stage
100644 188f4affe876964499a95325588f71d4955c16ef 0       test
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       testgsdjfs

040000:ディレクトリ
100644:通常の実行不可能なファイル
100664:グループ書き込み可能な通常の実行不可能ファイル
100755:実行可能ファイル
120000:シンボリックリンク
160000:Gitのリンク
先頭の3文字は、ファイルやディレクトリそれ以外を指す
後半3文字は、権限を指す

競合がない場合は、0となる

git commit

2.treeオブジェクト
blobオブジェクト名は、ヘッダーとファイル内容をSHA1によって、ハッシュ化された名前となる
そのため、blobオブジェクトとgit addしたファイルを、treeオブジェクトが紐づける
※treeオブジェクトはファイル構造とは異なる

#ツリーファイルのIDを取得する
$ git cat-file -p HEAD
tree 850626a9d2a85698c118b332191586765aeb01f6
author user名 <xx@gmail.com> 1709757111 +0900
committer user名 <xx@gmail.com> 1709757111 +0900

test

#ツリーファイルの中身を表示する
$ git cat-file -p 850626
040000 tree f05af273ba36fe5176e5eaab349661a56b3d27a0    test

3.Commitオブジェクト
commit時にcommit オブジェクトが生成される
commit オブジェクトはいつ、だれが、何を、目的が記録される

#ツリーファイルのIDを取得する
$ git cat-file -p HEAD
tree 449ddfa86385848f2d570d485c2dfa376ff6408f
parent 7a519397572c9cb8e9bebb62182532ecaa00d429
author user名 <xx@gmail.com> 1709757111 +0900
committer user名 <xx@gmail.com> 1709757111 +0900

treeは、ツリーオブジェクトが保存されている
parentは、親コミットを保存している
committerは、コミットを実施した人を保存している
Authorは、ファイルを編集を実施した人を保存している

備考

gitの構造はシンプルで素敵ですね

https://qiita.com/hiroaki-u/items/1c474c569b674c24493b
https://stackoverflow.com/questions/737673/how-to-read-the-mode-field-of-git-ls-trees-output

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0