Git

Git is a version control system designed to be used in a distributed ecosystem and primarily interfaced in a terminal (i.e. git(1)).

Compare to CVS.


Installation

All Linux distributions offer a git package. Most BSD distributions do as well.

On Windows, see the Git for Windows project.


Usage

To begin tracking a directory, run git init. This creates a .git folder to maintain the internal state of the version control system.

Use git status to show the current state in a human-readable format.

Branches

For more information about using branches, see here.

Submodules

To clone a repository that uses submodules, try:

git clone --recurse-submodules [email protected]:example/example.git

Alternatively, submodules can be pulled in a separate step.

git clone [email protected]:example/example.git
cd example
git submodule update --init --recursive

To add a submodule, try:

git submodule add [email protected]:example/subexample

To delete a submodule, try:

git submodule deinit subexample

Patches

To create a patch, try:

git format-patch -1 HEAD

Generally, the HEAD can be omitted.

This creates a patch file that can be applied like:

git apply 0001-Commit-Message-Here.patch

To create a patchset of the last 3 commits, try:

git format-patch -2

This will create a series of patches that are named sequentially like 0001-Commit-1.patch, 0002-Commit-2.patch, and so on.

Note that applying a patch with git apply simply changes local files. It does not create a local commit. Compare to git am, which is meant for applying patches as commits, including metadata embedded into the patchset (i.e., creator, date, etc.).

To create a squashed patch, try:

# Assumes that local work is in a development branch

# Create a temporary branch to house a squashed commit from the development branch
git checkout -b temporary-branch
git merge --squash development-branch
git commit -a -m "Squashed Commit Message"

# Create a patch against the main branch (usually either `master` or `main`)
git format-patch main

# Finally return to main branch delete the temporary branch
git checkout main
git branch -d temporary-branch


Troubleshooting

Fatal error when cloning a remote repository

If git fails to clone a remote repository, possibly with one of the following error messages:

fatal: fetch-pack: invalid index-pack output
...
fatal: early EOF
fatal: index-pack failed

Then try a shallow clone first:

git clone --depth 1 https://example.com/repo.git
git fetch --unshallow
git pull --all


See also

git(1)

git-shell

CGit


CategoryRicottone

Git (last edited 2025-01-29 15:37:43 by DominicRicottone)