.git/objects folder

.git/objects folder

Below you can see how the git folders tree looks like. I try to find out how does git works under the hood. I've discovered now objects folders which consist of 3 main parts of git (blob, tree, commit).

tree .git

.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── FETCH_HEAD
├── HEAD
├── hooks
   ├── pre-commit
├── index
├── info
   └── exclude
├── logs
   ├── HEAD
   └── refs
       ├── heads
          ├── dev
          └── main
       └── remotes
           └── origin
               ├── dev
               ├── HEAD
               └── main
├── objects
   ├── 04
      └── c01ba7ba0830ccdc49fce1c7257114ed81e68b
   ├── 06
      └── 85466ca51b5dd776bf68d7bea9658a2c6394c8
   ├── 13
      └── 433d17addae1d21ed43b609851b59e8742e0aa
   ├── 1b
      └── 788babb559a114e72f78877167b3d0c2af4600
   ├── 1f
      └── ed445333e85fb9996542978fa56866de90a2fb
   ├── 32
      └── 002f6aafbed15766c5776240cf3943b6f24c5c
   ├── 38
      └── e81aa7603fbd430cf2eff6731f7510cfd5b402
   ├── 3f
      └── f4865eaed764c1aea206caf147a7ae86100996
   ├── 43
      └── 8070e9c20fa7b3a578661560a12e8fe13fae75
   ├── 45
      └── 6751f0a8a26971f34ef6d01a019fa45d5d901b
   ├── 48
      └── af5018faa49a5367cf959fbef5d0f42354289f
   ├── 51
      └── 070bfa60cca14d1b0543c80b15b3039aa469ac
   ├── 52
      └── 5cb33d0d86b5ae606c0b3424098f295146cbdb
   ├── 54
      └── 4138be45652abc7bc3873341deacd3f4f90c61
   ├── 59
      └── 348677b29ae11a81444ec0eb128da61cd57c98
   ├── 73
      └── 5ec33c2d4b37eb04f8283c70284fa74ff1359d
   ├── 81
      └── 3a2b527845028e87f7ddefca45ea1f8d101bef
   ├── 93
      └── b1f5fe255ed2aa5a615a9ea5d5d118c604df44
   ├── 95
      └── 5426670d68064003415ae1398951a9df44ac2a
   ├── a5
      └── b7a645485288d2aa3c1350412c02f95a4591f9
   ├── ae
      └── aa9a962d7a91c5528d26ce234973e181f418c8
   ├── b0
      └── d4a6557ac193f35307a77ee4a6ed14bebbe028
   ├── b9
      └── 905034ad3e75cb789a7e2369801d7298d0e1dd
   ├── bd
      └── 792184e14917d2674de5010747445a9015b610
   ├── cb
      └── 819f047c487bba28253b9ec9585901df6e6386
   ├── d4
      └── f667758e1ab0019bb056b580f94408b7a976ca
   ├── dc
      └── 4f4b46c8e0dc1fbeb01e395475b719ec82ac11
   ├── df
      └── 6fcf51b7d33054d5c29a0cbccf8035b2187a5e
   ├── e1
      └── d9fa02cd6e6f7a3a4b4e748012122a64475cc8
   ├── e3
      ├── 9207e458ae7e13dbc8b1e51440bddb8b737f62
      └── f7815b58b1469821cec6c4c31584524dd858f9
   ├── e6
      └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
   ├── e9
      └── 5ab6b74f5a52a0c8c3d40f517a2eeec394627a
   ├── ed
      └── ff432ce782c38b2f07f0a94cae5c247b831851
   ├── f5
      ├── 19b6cee358be6fedfc991fc761ced7ef4dd197
      └── c5686c36071c567e0eab343449c5cc822a1eb3
   ├── fd
      └── 2c28370ef47d5c90b99fdc24c18ff35e1b5165
   ├── ff
      └── 7ac7e4b6e9af27d3f1700c9e81495917bafeb1
   ├── info
   └── pack
       ├── pack-dff98b261854722b492eeebf0c68358aa4c28475.idx
       └── pack-dff98b261854722b492eeebf0c68358aa4c28475.pack
├── ORIG_HEAD
├── packed-refs
└── refs
    ├── heads
       ├── dev
       └── main
    ├── remotes
       └── origin
           ├── dev
           ├── HEAD
           └── main
    └── tags

git log

commit 93b1f5fe255ed2aa5a615a9ea5d5d118c604df44 (HEAD -> main, origin/main, origin/HEAD)
Merge: bd79218 3ff4865
Author: Andrey Radkevich <email@gmail.com>
Date:   Sun Nov 22 00:50:19 2020 +0200

    Merge pull request #2 from andreyradkevich/dev

    flow-prettier-husky-pre-commit-check

Here you can see 93b1f5fe255ed2aa5a615a9ea5d5d118c604df44 commit id , you fill find it inside of objects folder, let's we what does which file consist of

git cat-file -p 93b1f5fe255ed2aa5a615a9ea5d5d118c604df44

tree ff7ac7e4b6e9af27d3f1700c9e81495917bafeb1
parent bd792184e14917d2674de5010747445a9015b610
parent 3ff4865eaed764c1aea206caf147a7ae86100996
author Andrey Radkevich <andreyradkevichasap@gmail.com> 1605999019 +0200
committer GitHub <noreply@github.com> 1605999019 +0200

as you can see this file consist of information about the commit, some metadata, for be sure that this is a commit file type, you can use the next command:

git cat-file -p 93b1f5fe255ed2aa5a615a9ea5d5d118c604df44
commit

In commit metadata you can also see this line tree ff7ac7e4b6e9af27d3f1700c9e81495917bafeb1 , we see that this file are in objects folder , and this file have type tree , let's check what is inside:

git cat-file -p ff7ac7e4b6e9af27d3f1700c9e81495917bafeb1
100644 blob df6fcf51b7d33054d5c29a0cbccf8035b2187a5e    .babelrc
100644 blob 1fed445333e85fb9996542978fa56866de90a2fb    .flowconfig
100644 blob e1d9fa02cd6e6f7a3a4b4e748012122a64475cc8    .gitignore
100644 blob 544138be45652abc7bc3873341deacd3f4f90c61    .prettierrc
100644 blob eca6a3a0fdac9f373ea135e5e91d33eb70d2a343    README.md
100644 blob 38e81aa7603fbd430cf2eff6731f7510cfd5b402    index.html
100644 blob 735ec33c2d4b37eb04f8283c70284fa74ff1359d    package.json
040000 tree f5c5686c36071c567e0eab343449c5cc822a1eb3    src
100644 blob 13433d17addae1d21ed43b609851b59e8742e0aa    webpack.dev.config.js
100644 blob 955426670d68064003415ae1398951a9df44ac2a    yarn.lock

as you can see this file consist importantion about each file I have in my project folder , almost all of them is blob (general file) , and also there is some tree file , because src is folder, let's check how blob file looks like, let's tage index.html (100644 blob 38e81aa7603fbd430cf2eff6731f7510cfd5b402 index.html) file :

git cat-file -p 38e81aa7603fbd430cf2eff6731f7510cfd5b402
<!DOCTYPE html>
<html>
  <body>
    <div id="root" />
  </body>
</html>

You see that it consist of code which is there, we don't need to check what type this file has, because it already is shown in the tree list. Hope this post will be useful for you to have some start point in understanding what git is and how it looks under the hood. I also try to learn it , don't be picky!