\chapter{GIT}
\index{GIT} \label{chap:GIT}

Git est un système de gestion de version, très bien expliqué
aux quatre coins des interwebs. Je ne vais donc pas m'étendre
plus que ça, pour passer tout de suite à un cas particulier
\footnote{que je n'arrive pas encore à vraiment maitriser}.

Un des premiers ancêtres connus de Git est 
\textsc{sccs}\index{SCCS}.

% --------------------------------------------------------------------
\section{Démarrage}

\subsection{En local}
\begin{verbatim}
$ mkdir Foo
$ cd Foo/
$ git init
$ > README.txt
$ git add README.txt
\end{verbatim}

\subsection{Setup du serveur}

Sur le serveur distant, dans un endroit accessible par
le protocole \texttt{HTTP}, il faut créer le dépot.

\begin{verbatim}
$ mkdir Foo
$ cd Foo/
$ git init --bare
\end{verbatim}

Et ensuite :
\begin{verbatim}
$ git update-server-info
\end{verbatim}

% --------------------------------------------------------------------
\subsection{Pousser le code}

Notre commit\index{commit} local semble pertinent,
il est temps de le faire connaitre au monde.

\begin{verbatim}
$ git push yuser@serveur:/chemin/vers/le/depot/Foo
\end{verbatim}

% --------------------------------------------------------------------

\section{Configuration dynamique}

\texttt{http://sandrotosi.blogspot.com/2020/10/multiple-git-configurations-depending.html}

One way to change the user.email git config value is to git config --local
in every repo, but that's tedious, error-prone and
doesn't scale very well with many repositories
(and the chances to forget to set the right one on a new repo are ~100\%).

The solution is to use the git-config ability to include
extra configuration files, based on the repo path, by using includeIf:
\vspace{1em}

Content of \texttt{\$HOME/.gitconfig} :

\begin{verbatim}
[user]
    name = Sandro Tosi
    email = <personal.address>@gmail.com

[includeIf "gitdir:~/deb/"]
    path = ~/.gitconfig-deb
\end{verbatim}

Every time the git path is in ~/deb/ (which is where i have all Debian repos)
the file ~/.gitconfig-deb will be included; its content:

\begin{verbatim}
[user]
    email = morph@debian.org
\end{verbatim}

That results in my personal address being used on all repos not part of Debian, where i use my Debian email address. This approach can be extended to every other git configuration values.
% --------------------------------------------------------------------

\section{Krkrkr...}

Tout cela semble bien compliqué.


