<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter SYSTEM "../../dtd/dblite.dtd">
<chapter id="tgit-introduction">
	<title>Introduction</title>
	<?dbhh topicname="HIDD_ABOUT"?>
	<simplesect>
		<indexterm>
			<primary>version control</primary>
		</indexterm>
		<para>
			Version control is the art of managing changes to
			information. It has long been a critical tool for programmers,
			who typically spend their time making small changes to software
			and then undoing or checking some of those changes the next day.
			Imagine a team of such developers working concurrently - and perhaps even
			simultaneously on the very same files! - and you can see why
			a good system is needed to <emphasis>manage the potential chaos</emphasis>.
		</para>
	</simplesect>
	<!-- ================================================================= -->
	<!-- ======================== SECTION 1 ============================== -->
	<!-- ================================================================= -->
	<sect1 id="tgit-intro-about">
		<title>What is TortoiseGit?</title>
		<para>
			TortoiseGit is a free open-source client for the
			<firstterm>Git</firstterm> version control system.
			That is, TortoiseGit manages files over time.
			Files are stored in a local <firstterm>repository</firstterm>.
			The repository is much like an ordinary file server, except that it
			remembers every change ever made to your files and directories.
			This allows you to recover older versions of your files and examine
			the history of how and when your data changed, and who changed it.
			This is why many people think of Git and version control
			systems in general as a sort of <quote>time machine</quote>.
		</para>
		<para>
			Some version control systems are also software configuration
			management (SCM) systems. These systems are specifically
			tailored to manage trees of source code, and have many features
			that are specific to software development - such as natively
			understanding programming languages, or supplying tools for
			building software. Git, however, is not one of these
			systems; it is a general system that can be used to manage
			<emphasis>any</emphasis> collection of files, including
			source code.
		</para>
		<para>
			Git is an <emphasis>open source, distributed version control system</emphasis>
			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.
		</para>
	</sect1>
	<!-- ================================================================= -->
	<!-- ======================== SECTION 2 ============================== -->
	<!-- ================================================================= -->
	<sect1 id="tgit-intro-history">
		<title>TortoiseGit's History</title>
		<para>
			In 2008, Frank Li found that Git was a very good version
			control system, but it lacked a good GUI client. The idea for a
			Git client as a Windows shell integration was inspired by
			the similar client for SVN named TortoiseSVN.
		</para>
		<para>
			Frank studied the source code of TortoiseSVN and used it as a base for
			TortoiseGit. He then started the project, registered the project
			at code.google.com and put the source code online.
		</para>
		<para>
			At the end of 2010 Sven Strickroth joined the TortoiseGit project. Then, he became
			the current maintainer few years later.
		</para>
		<para>
			From August 2015, GoogleCode was shut down and the TortoiseGit project established their
			website TortoiseGit.org and migrated the main repository and issue tracker to GitLab.
		</para>
		<para>
			As Git became more stable it attracted more and more users
			who also started using TortoiseGit as their Git client.
		</para>
		<para>
			For more information what changed over the releases check out the <ulink url="https://tortoisegit.org/releasenotes">latest release notes</ulink> or inspect our <ulink url="https://tortoisegit.org/sourcecode">git commit history</ulink>.
		</para>
	</sect1>
	<!-- ================================================================= -->
	<!-- ======================== SECTION 3 ============================== -->
	<!-- ================================================================= -->
	<sect1 id="tgit-intro-features">
		<title>TortoiseGit's Features</title>
		<para>
			What makes TortoiseGit such a good Git client?
			Here's a short list of features.
		</para>
		<variablelist>
			<varlistentry>
				<term>Shell integration</term>
				<listitem>
					<indexterm>
						<primary>Windows shell</primary>
					</indexterm>
					<indexterm>
						<primary>explorer</primary>
					</indexterm>
					<para>
						TortoiseGit integrates seamlessly into the Windows shell
						(i.e. the explorer). This means you can keep working
						with the tools you're already familiar with. And you
						do not have to change into a different application
						each time you need functions of the version control!
					</para>
					<para>
						And you are not even forced to use the Windows Explorer.
						TortoiseGit's context menus work in many other file managers,
						and in the File/Open dialog which is common to most
						standard Windows applications.
						You should, however, bear in mind that TortoiseGit
						is intentionally developed as extension for the Windows
						Explorer. Thus it is possible that in other applications
						the integration is not as complete and e.g. the icon
						overlays may not be shown.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Icon overlays</term>
				<listitem>
					<para>
						The status of every versioned file and folder is
						indicated by small overlay icons. That way you can see
						right away what the status of your working tree is.
					</para>
					<para>
						The icon overlays are based on TortoiseOverlays (<ulink url="https://tortoisesvn.net/">https://tortoisesvn.net</ulink>)
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Easy access to Git commands</term>
				<listitem>
					<para>
						All Git commands are available from the explorer
						context menu. TortoiseGit adds its own submenu there.
					</para>
				</listitem>
			</varlistentry>
		</variablelist>
		<para>
			Since TortoiseGit is a Git client, we would also like to show you
			some of the features of Git itself:
		</para>
		<variablelist>
			<varlistentry>
				<term>Distributed version control</term>
				<listitem>
					<para>
						 Like most other modern version control systems, Git
						 gives each developer a local copy of the entire development
						 history, and changes are copied from one such repository
						 to another. These changes are imported as additional
						 development branches, and can be merged in the same way
						 as a locally developed branch. Repositories can be easily
						 accessed via the efficient Git protocol (optionally wrapped
						 in SSH for authentication and security) or simply using
						 HTTP - you can publish your repository anywhere without
						 any special web server configuration required.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Atomic commits</term>
				<listitem>
					<para>
						A commit either goes into the repository completely,
						or not at all.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Strong support for non-linear development</term>
				<listitem>
					<para>
						Git supports rapid and convenient branching and merging,
						and includes powerful tools for visualizing and navigating
						a non-linear development history.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Efficient handling of large projects</term>
				<listitem>
					<para>
						Git is very fast and scales well even when working with
						large projects and long histories. It is commonly an order
						of magnitude faster than most other version control systems,
						and several orders of magnitude faster on some operations.
						It also uses an extremely efficient packed format for long-term
						revision storage that currently tops any other open source
						version control system.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Cryptographic authentication of history</term>
				<listitem>
					<para>
						The Git history is stored in such a way that the name of a
						particular revision (a "commit" in Git terms) depends upon
						the complete development history leading up to that commit.
						Once it is published, it is not possible to change the old
						versions without it being noticed. Also, tags can be
						cryptographically signed.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Efficient branching and tagging</term>
				<listitem>
					<para>
						The cost of branching and tagging need not be
						proportional to the project size. Branch is just head of commits.
						Tag is friend name of commit hash.
					</para>
				</listitem>
			</varlistentry>
			<varlistentry>
				<term>Toolkit design</term>
				<listitem>
					<para>
						Following the Unix tradition, Git is a collection of many small
						tools written in C, and a number of scripts that provide convenient
						wrappers. Git provides tools for both easy human usage and easy
						scripting to perform new clever operations.
					</para>
				</listitem>
			</varlistentry>
		</variablelist>
	</sect1>
	<!-- ================================================================= -->
	<!-- ======================== SECTION 4 ============================== -->
	<!-- ================================================================= -->
	<sect1 id="tgit-intro-install">
		<title>Installing TortoiseGit</title>
		<sect2>
			<title>System requirements</title>
			<para>
				TortoiseGit runs on Windows 10 or higher.
				Windows 98, Windows ME, Windows NT4, Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8 and Windows 8.1 are no longer supported.
				If you are running such an old system, you can still use older, however unsupported, releases of TortoiseGit.
				Those can be found on the <ulink url="https://download.tortoisegit.org/">download server</ulink> (TortoiseGit 1.7 dropped support for Windows 2000; TortoiseGit 1.9 dropped support for Windows XP, TortoiseGit 2.5 dropped support for Windows Vista, TortoiseGit 2.18.0 dropped support for Windows 7, Windows 8, and Windows 8.1).
			</para>
			<para>
				If you encounter any problems during or after installing
				TortoiseGit please refer to
				<xref linkend="tgit-faq"/>
				first.
			</para>
		</sect2>
		<sect2>
			<title>Installation</title>
			<indexterm>
				<primary>install</primary>
			</indexterm>
			<para>
				TortoiseGit comes with an easy to use installer. Double click on
				the installer file and follow the instructions. The installer
				will take care of the rest.
			</para>
			<para>
				One prerequisite of TortoiseGit is that it requires an already installed (command line) Git client which provides a <filename>git.exe</filename>.
				<ulink url="https://gitforwindows.org/">Git for Windows</ulink> is recommended (Cygwin and MSYS2 Git also work, see <xref linkend="tgit-dug-settings-main"/> for configuration. Please note that Cygwin and MSYS2 Git are not officially supported by TortoiseGit as the developers only use Git for Windows. Bug reports, however, are welcome).
				Installation of Git for Windows can be done with preselected options, however, no need to install the "Windows Explorer integration".
				If you know about CRLF and LF line endings and you have editors coping with that, you should select "Checkout as-is, commit as-is" in order to prevent automatic translations.
			</para>
			<important>
				<para>
					You need Administrator privileges to install TortoiseGit.
				</para>
			</important>
		</sect2>
		<sect2 id="tgit-intro-install-lang">
			<title>Language Packs</title>
			<?dbhh topicname="HIDD_FIRSTSTARTWIZARD_LANGUAGE"?>
			<indexterm>
				<primary>language packs</primary>
			</indexterm>
			<indexterm>
				<primary>translations</primary>
			</indexterm>
			<para>
				The TortoiseGit user interface has been translated into many
				different languages, so you may be able to download a language
				pack to suit your needs.
				You can find the language packs on our
				<ulink url="https://tortoisegit.org/download">
					<citetitle>translation status page</citetitle>
				</ulink>.
				And if there is no language pack available yet, why not join
				the team and <ulink url="https://tortoisegit.org/translate">submit your own translation</ulink> ;-)
			</para>
			<para>
				Each language pack is packaged as a <filename>.msi</filename> installer.
				Just run the install program after the installation of the main TortoiseGit package and follow the instructions.
				After the installation finishes, the translation will be available and can be selected in settings dialog (cf. <xref linkend="tgit-dug-settings-main"/>).
			</para>
		</sect2>
		<sect2 id="tgit-intro-instalsl-spell">
			<title>Spell checker</title>
			<indexterm>
				<primary>spell checker</primary>
			</indexterm>
			<indexterm>
				<primary>dictionary</primary>
			</indexterm>
			<para>
				TortoiseGit includes a spell checker which allows you to check your
				commit log messages. This is especially useful if the project language
				is not your native language.
				By default the spell checker uses the same dictionary files as
				<ulink url="https://www.libreoffice.org/">
					<citetitle>LibreOffice</citetitle>
				</ulink>,
				<ulink url="https://www.openoffice.org/">
					<citetitle>OpenOffice.org</citetitle>
				</ulink>
				and
				<ulink url="https://mozilla.org">
					<citetitle>Mozilla</citetitle>
				</ulink>.
				TortoiseGit can also use the spell checker shipped with Windows 8+. However, this needs to be enabled manually in advanced settings (key <literal>Win8SpellChecker</literal>) at the moment.
			</para>
			<para>
				The installer by default automatically adds the US English dictionary.
				If you want other languages, the easiest option is simply to
				install one of TortoiseGit's language packs (see <xref linkend="tgit-intro-install-lang"/>). This will install
				the appropriate dictionary files as well as the TortoiseGit local
				user interface.
				After the installation finishes, the translation will be available.
				When using the Windows spell checker, you need to install the dictionary in Windows first.
			</para>
			<para>
				Or you can install the dictionaries yourself. If you have OpenOffice.org, LibreOffice or
				Mozilla installed, you can copy those dictionaries, which are located
				in the installation folders for those applications.
				Otherwise, you need to download the required dictionary files from
				<ulink url="https://cgit.freedesktop.org/libreoffice/dictionaries/">
					<citetitle>https://cgit.freedesktop.org/libreoffice/dictionaries/</citetitle>
				</ulink>.
			</para>
			<para>
				Once you have got the dictionary files, you
				probably need to rename them so that the filenames only have
				the locale chars in it.
				Example:
				<itemizedlist>
					<listitem>
						<para>
							<filename>en_US.aff</filename>
						</para>
					</listitem>
					<listitem>
						<para>
							<filename>en_US.dic</filename>
						</para>
					</listitem>
				</itemizedlist>
				Then just copy them into the <filename>%APPDATA%\TortoiseGit\dic</filename> folder. If that folder isn't
				there, you have to create it first.
				TortoiseGit will also search the <filename>Languages</filename> sub-folder of
				the TortoiseGit installation folder (normally this will be <filename>C:\Program Files\TortoiseGit\Languages</filename>);
				this is the place where the language packs put their files.
				However, the <filename>%APPDATA%</filename>-folder doesn't require administrator privileges and, thus, has higher priority.
				The next time you start TortoiseGit, the spell checker will be available.
			</para>
			<para>
				If you install multiple dictionaries, TortoiseGit uses these rules
				to select which one to use.
				<orderedlist>
					<listitem>
						<para>
						Check the <literal>tgit.projectlanguage</literal> setting. This setting can be set using TortoiseGit Settings <guilabel>Dialogs 3</guilabel> page (<xref linkend="tgit-dug-settings-dialogs3"/>).
						Refer to <gitdoclink cmd="git-config" section="1"/> for information
						about setting properties (use the <literal>LCID Dec</literal> value as <ulink url="https://docs.microsoft.com/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c">assigned by Microsoft</ulink>).
						</para>
					</listitem>
					<listitem>
						<para>
						If no project language is set, or that language is not
						installed, try the language corresponding to the Windows locale.
						</para>
					</listitem>
					<listitem>
						<para>
						If the exact Windows locale doesn't work, try the
						<quote>Base</quote> language, e.g.
						<literal>de_CH</literal> (Swiss-German) falls back to
						<literal>de_DE</literal> (German).
						</para>
					</listitem>
					<listitem>
						<para>
						If none of the above works, then the default language
						is English, which is included by default with the standard installation.
						</para>
					</listitem>
				</orderedlist>
				When using the Windows spell checker, this is tried first. If no Windows dictionary, based on these fallback-rules, could be found then the "old" spell checker is used as a fallback.
			</para>
		</sect2>
	</sect1>
</chapter>
<!--
local variables:
sgml-parent-document: ("book.xml" "chapter")
end:
-->
