Git stores the repository data using a combination of delta encoding and compression. This allows for the repository to be very light.

Git also focuses on file content rather than just the names of the files. This enables Git to scale and work with teams that may be working asynchronously.

What is a GIT Repository?

A GIT repository is a central hub where changes to your code are saved. It is also where the history of those changes is recorded. This allows for easy recovery of previous versions of your files in the event of system failures or accidental deletions.

Git is a distributed version control system, commonly used for coordinating software development projects with multiple developers. It is a modern alternative to traditional centralized version control systems like CVS and Subversion. Git provides a streamlined workflow for collaborative code development, including support for non-linear workflows and a feature called branches that allow developers to work on separate features or bug fixes in parallel without impacting each other’s progress or the mainline codebase.

The primary functions of a GIT repository are tracking, staging and committing changes to your codebase. In a normal local directory that is tracked with Git, you have a staging area (also known as the staging index) where changes are placed before they are committed to the repository. When a file in the staging area is ready to be committed, it can be staged with the git add command. The git commit command takes the staged file and records its changes in the repository, along with a descriptive commit message.

Once a file is added to the staging area, it can be pushed to a remote repository using the git push and git pull commands. When a developer wants to collaborate with other developers, they can share their local copy of the repository by copying it with the git clone command. The copied repository is then referred to as a remote repository.

When working with a repository, it is important to keep track of its status. The git status command will provide details on the state of a repository, such as whether it is bare or non-bare, if there is a staging area, and if files are tracked or untracked.

To create a new Git repository, you can use the git init command. You can also turn an existing directory into a Git repository by using the git clone command with [repository_url] and directory_path>. Initializing a repository creates a special subdirectory of your project directory that Git uses to track changes to the project files. The repository only starts tracking changes once you commit the first set of changes in it.

Bare Repository

Typically when we are collaborating with other people on a project, we want to use a central repository so that all the changes can be stored and prevented from conflicting versions of files on different computers. If multiple people clone the same bare repository, they can each make changes locally and then push them back to the shared bare repo. By avoiding the need for each person to have their own local bare repository, it is possible to work on a project with a larger number of developers without the risk of unintended conflicts occurring.

To create a bare repository, run the command git init –bare. This will create a directory that is similar to a regular repository but cannot be committed to. There is a special folder within the bare repository called the working tree, and it is inside of this that all the project files/sub-directories reside. However, if you try to push to a bare repository that is already being worked on by someone else then you will get an error that says “You cannot push to a working repository.”

Bare repositories do not contain a working or checked out copy of your source files. Instead, they only store the git revision history of your repository in the root folder, and this is what you typically see when looking at a bare repository. This means that commands that require a working tree, such as git annex add won’t work in a bare repository.

The reason a bare repository does not contain a working tree is that the file changes you make to your own local copy of your files are recorded in a commit, and this commit contains information about where your source file was located, what it contained, and any changes you made to it. When someone pulls from the bare repository, they can then replay your commit in their own working copy, and the result will be that they have exactly the same set of files on their computer as you do.

This is one of the reasons why bare repositories are so useful in the workplace – they allow for collaboration on large projects that would otherwise be impossible to manage without having a central version control server to prevent conflicting files from forming between different local copies of files. As an added bonus, because bare repositories don’t have a working tree, they are much smaller than non-bare repositories. This means that they can be hosted on servers with more limited bandwidth and still provide all the same functionality. This is especially helpful for those who host their own code hosting services such as GitHub and Bitbucket, as it reduces the amount of storage space required for each repository.