Introduction to Git

Git is a free and open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do. Git is used for version control of files, much like tools such as Mercurial-6.3.2, Bazaar, Subversion-1.14.2, CVS, Perforce, and Team Foundation Server.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

  • Download (HTTP):

  • Download MD5 sum: 32d34dc65ae0955cc68c7152b5ca8b13

  • Download size: 6.8 MB

  • Estimated disk space required: 392 MB (with downloaded documentation, add 18 MB to build documentation)

  • Estimated build time: 0.3 SBU (with parallelism=4; add 0.4 SBU for building documentation and 1.6 SBU (disk speed dependent) for tests, both with parallelism=4)

Additional Downloads

Git Dependencies



GnuPG-2.4.0 (runtime, may be used to sign Git commits or tags, or verify the signatures of them), OpenSSH-9.2p1 (runtime, needed to use Git over ssh), pcre2-10.42 (or the deprecated PCRE-8.45), in either case configured with --enable-jit, Subversion-1.14.2 with Perl bindings (runtime, for git svn), Tk-8.6.13 (gitk, a simple Git repository viewer, uses Tk at runtime), Valgrind-3.20.0, Authen::SASL and MIME::Base64 (both runtime, for git send-email), and IO-Socket-SSL-2.081 (runtime, for git send-email to connect to a SMTP server with SSL encryption)

Optional (to create the man pages, html docs and other docs)

xmlto-0.0.28 and asciidoc-10.2.0 , and also dblatex (for the PDF version of the user manual), and docbook2x to create info pages

User Notes:

Installation of Git

Install Git by running the following commands:

./configure --prefix=/usr \
            --with-gitconfig=/etc/gitconfig \
            --with-python=python3 &&

You can build the man pages and/or html docs, or use downloaded ones. If you choose to build them, use the next two instructions.

If you have installed asciidoc-10.2.0 you can create the html version of the man pages and other docs:

make html

If you have installed asciidoc-10.2.0 and xmlto-0.0.28 you can create the man pages:

make man

The test suite can be run in parallel mode. To run the test suite, issue: make test. If run as a normal user, 0 tests should be reported as failed in the final summary.

Now, as the root user:

make perllibdir=/usr/lib/perl5/5.36/site_perl install

If you created the man pages and/or html docs

Install the man pages as the root user:

make install-man

Install the html docs as the root user:

make htmldir=/usr/share/doc/git-2.39.2 install-html

If you downloaded the man pages and/or html docs

If you downloaded the man pages untar them as the root user:

tar -xf ../git-manpages-2.39.2.tar.xz \
    -C /usr/share/man --no-same-owner --no-overwrite-dir

If you downloaded the html docs untar them as the root user:

mkdir -vp   /usr/share/doc/git-2.39.2 &&
tar   -xf   ../git-htmldocs-2.39.2.tar.xz \
      -C    /usr/share/doc/git-2.39.2 --no-same-owner --no-overwrite-dir &&

find        /usr/share/doc/git-2.39.2 -type d -exec chmod 755 {} \; &&
find        /usr/share/doc/git-2.39.2 -type f -exec chmod 644 {} \;

Reorganize text and html in the html-docs (both methods)

For both methods, the html-docs include a lot of plain text files. Reorganize the files as the root user:

mkdir -vp /usr/share/doc/git-2.39.2/man-pages/{html,text}         &&
mv        /usr/share/doc/git-2.39.2/{git*.txt,man-pages/text}     &&
mv        /usr/share/doc/git-2.39.2/{git*.,index.,man-pages/}html &&

mkdir -vp /usr/share/doc/git-2.39.2/technical/{html,text}         &&
mv        /usr/share/doc/git-2.39.2/technical/{*.txt,text}        &&
mv        /usr/share/doc/git-2.39.2/technical/{*.,}html           &&

mkdir -vp /usr/share/doc/git-2.39.2/howto/{html,text}             &&
mv        /usr/share/doc/git-2.39.2/howto/{*.txt,text}            &&
mv        /usr/share/doc/git-2.39.2/howto/{*.,}html               &&

sed -i '/^<a href=/s|howto/|&html/|' /usr/share/doc/git-2.39.2/howto-index.html &&
sed -i '/^\* link:/s|howto/|&html/|' /usr/share/doc/git-2.39.2/howto-index.txt

Command Explanations

--with-gitconfig=/etc/gitconfig: This sets /etc/gitconfig as the file that stores the default, system wide, Git settings.

--with-python=python3: Use this switch to use Python 3, instead of the EOL'ed Python 2. Python is used for the git p4 interface to Perforce repositories, and also used in some tests.

--with-libpcre2: Use this switch if PCRE2 is installed and has been built with the non-default JIT enabled.

--with-libpcre1: As an alternative to PCRE2, use this switch if the deprecated PCRE is installed and has been built with the non-default JIT enabled.

tar -xf ../git-manpages-2.39.2.tar.gz -C /usr/share/man --no-same-owner: This untars git-manpages-2.39.2.tar.gz. The -C option makes tar change directory to /usr/share/man before it starts to decompress the docs. The --no-same-owner option stops tar from preserving the user and group details of the files. This is useful as that user or group may not exist on your system; this could (potentially) be a security risk.

mv /usr/share/doc/git-2.39.2 ...: These commands move some of the files into subfolders to make it easier to sort through the docs and find what you're looking for.

find ... chmod ...: These commands correct the permissions in the shipped documentation tar file.

Configuring Git

Config Files

~/.gitconfig and /etc/gitconfig


Installed Programs: git, git-receive-pack, git-upload-archive, and git-upload-pack (hardlinked to each other), git-cvsserver, git-shell, gitk, and scalar
Installed Libraries: None
Installed Directories: /usr/libexec/git-core, and /usr/share/{doc/git-2.39.2,git-core,git-gui,gitk,gitweb}

Short Descriptions


is the stupid content tracker


is a CVS server emulator for Git


is a graphical Git repository browser (needs Tk-8.6.13)


is invoked by git send-pack and updates the repository with the information fed from the remote end


is a login shell for SSH accounts to provide restricted Git access


is invoked by git archive --remote and sends a generated archive to the other end over the git protocol


is invoked by git fetch-pack, it discovers what objects the other side is missing, and sends them after packing


is a repository management tool that optimizes Git for use in large repositories