Skip to main content

Using Git

What is the .git folder?

See the .git folder in your project directory and wonder what it is about. Let me explain all about it.

The simple answer is that the .git folder is a hidden directory that is automatically created when you initialize or clone a new Git repository.

But wait. Does that hold any critical information? If yes, how important is it, and if you were to remove it, what would it cause?

So many questions. Right? Well, I'll be answering them one by one.

Importance of the .git folder

As I mentioned, whenever you clone a directory or initialize a new Git directory, the git command will automatically create a .git directory.

The .git directory is essential for Git to work correctly as it contains all the necessary information related to version control, commits, the address of the remote repository, etc.

But that's not all. It also contains a log that stores the commit history which is crucial to roll back to the previous state.

For example, here, I initialized a new empty Git repository and it created the .git directory for that repository:

Initialise Git repository to create a .git folder

Now, let's have a look at the contents of the .git directory. Here, I have used the ls command to list the hidden files:

List contents of the .git folder using the ls command

Here,

  • branches: This directory was used to store addresses for commands like git fetch, git pull, and git push but now it is deprecated and not used anymore.
  • config: It is a local configuration file for that specific Git directory.
  • description: It serves as a nametag for your repository and a default way to know the name of the repository.
  • HEAD: Used to keep track of the current branch and updated automatically whenever you switch the branch.
  • hooks: Contains scripts that Git will execute at certain events such as while committing or pushing.
  • info: This is where Git will store the additional information about the repository. The info directory will be ignored if $GIT_COMMON_DIR is set.
  • objects: This repository is used to store all the data for the history of your Git repository. Here you will find every version of every file with every change ever made to it.
  • refs: Git stores pointers as a reference to commit objects for quick commits without having to remember their hashes.

Should you remove the .git folder?

I'd say "NO". You should not remove the .git directory from your computer.

Sure, removing the .git directory won't remove the other files in the directory that are part of the Git repository but the directory will no longer be under version control.

If you delete the .git directory, you lose the entire history of your project and you will not be able to roll back to the changes.

Reduce the size of the .git folder

There are a few tips I can share to reduce the size of the .git directory.

First is to prune the remote-tracking branches that have already been removed from the origin but are still available locally:

git remote prune origin

You can also enable the garbage collection using the following command:

git gc --auto

Another good idea is to repack objects into a single-pack file. If your directory is large, then it may take a while so please be patient:

git repack -a -d --depth=250 --window=250

That should do it.

Sagar Sharma