%general-entities; ]> $Date$ Git-&git-version; Git 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 , Bazaar, , CVS, Perforce, and Team Foundation Server. &lfs101_checked; Package Information Download (HTTP): Download (FTP): Download MD5 sum: &git-md5sum; Download size: &git-size; Estimated disk space required: &git-buildsize; Estimated build time: &git-time; Additional Downloads &git-root;/git-manpages-&git-version;.tar.xz (not needed if you've installed , , and prefer to rebuild them) &git-root;/git-htmldocs-&git-version;.tar.xz and other docs (not needed if you've installed and want to rebuild the documentation). Git Dependencies Recommended (needed to use Git over http, https, ftp or ftps) Optional (or the deprecated ), in either case configured with --enable-jit, with Perl bindings (for git svn), (gitk, a simple Git repository viewer, uses Tk at runtime), , Authen::SASL and MIME::Base64 (both runtime, for git send-email) Optional (to create the man pages, html docs and other docs) and or AsciiDoctor, 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 && make 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 you can create the html version of the man pages and other docs: make html If you have installed and 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/&lfs-perl-version;/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-&git-version; 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-&git-version;.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-&git-version; && tar -xf ../git-htmldocs-&git-version;.tar.xz \ -C /usr/share/doc/git-&git-version; --no-same-owner --no-overwrite-dir && find /usr/share/doc/git-&git-version; -type d -exec chmod 755 {} \; && find /usr/share/doc/git-&git-version; -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-&git-version;/man-pages/{html,text} && mv /usr/share/doc/git-&git-version;/{git*.txt,man-pages/text} && mv /usr/share/doc/git-&git-version;/{git*.,index.,man-pages/}html && mkdir -vp /usr/share/doc/git-&git-version;/technical/{html,text} && mv /usr/share/doc/git-&git-version;/technical/{*.txt,text} && mv /usr/share/doc/git-&git-version;/technical/{*.,}html && mkdir -vp /usr/share/doc/git-&git-version;/howto/{html,text} && mv /usr/share/doc/git-&git-version;/howto/{*.txt,text} && mv /usr/share/doc/git-&git-version;/howto/{*.,}html && sed -i '/^<a href=/s|howto/|&html/|' /usr/share/doc/git-&git-version;/howto-index.html && sed -i '/^\* link:/s|howto/|&html/|' /usr/share/doc/git-&git-version;/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. : Use this switch if PCRE2 is installed and has been built with the non-default JIT enabled. : 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-&git-version;.tar.gz -C /usr/share/man --no-same-owner: This untars git-manpages-&git-version;.tar.gz. The option makes tar change directory to /usr/share/man before it starts to decompress the docs. The 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-&git-version; ...: 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 ~/.gitconfig /etc/gitconfig Contents Installed Programs Installed Libraries Installed Directories git, git-receive-pack, git-upload-archive, and git-upload-pack (hardlinked to each other), git-cvsserver, git-shell, and gitk None /usr/libexec/git-core, and /usr/share/{doc/git-&git-version;,git-core,git-gui,gitk,gitweb} Short Descriptions git is the stupid content tracker git git-cvsserver is a CVS server emulator for Git git-cvsserver gitk is a graphical Git repository browser (needs ) gitk git-receive-pack is invoked by git send-pack and updates the repository with the information fed from the remote end git-receive-pack git-shell is a login shell for SSH accounts to provide restricted Git access git-shell git-upload-archive is invoked by git archive --remote and sends a generated archive to the other end over the git protocol git-upload-archive git-upload-pack is invoked by git fetch-pack, it discovers what objects the other side is missing, and sends them after packing git-upload-pack