\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}

Personnellement, à ce moment, je suis perdu, et je galère souvent
avec git, désolé, je suis cablé comme ça. Alors je me soigne.
C'est pour ça que ce chapitre est incohérent, puisqu'il n'est
rempli que d'incertitudes.

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

\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.

% ====================================================================
% nouvelle section 15 avril 2021 - 
\section{Questions ouvertes}

Ahem\dots

Comment exclure par \textsl{.gitignore} tous les fichiers \texttt{foo.html} ?

% ====================================================================

\section{Trucs}


git archive --format tgz --prefix=my-project/
--output /tmp/my-project.tar.gz HEAD

% ====================================================================

