:: Git ::
Introduction
Fichiers de configuration
Git utilise une série de fichiers de configuration pour déterminer son comportement. Les emplacements sont lus dans un ordre précis et les valeurs lues en dernier écrasent les précédentes ("C'est le dernier qui parle qui a raison"). Vous pouvez positionner ces valeurs manuellement en éditant ces fichiers, mais je vous recommande d'utiliser la commande git config, ne serait-ce que pour éviter des erreurs de syntaxe.
/etc/gitconfig
Contient des valeurs pour tous les utilisateurs du système et tous leurs dépôts. Pour lire et modifier ce fichier, utiliser l'option --system avec git config.
$ git config --system [...]
~/.gitconfig
Spécifique à chaque utilisateur. Pour lire et modifier ce fichier, utiliser l'option --global.
$ git config --global [...]
.git/config
Le dernier emplacement lu par git est le fichier de configuration du dépôt en cours d'utilisation. Ces valeurs sont spécifiques à un unique dépôt. Pour lire et modifier ce fichier, utiliser l'option --local.
$ git config --local [...]
git-config
Pour modifier le comportement de git, il est nécessaire de spécifier certains paramètres de configuration à l'aide de la commande git-config.
Synopsis
$ git config [<file-option>] [type] [--show-origin] [-z|--null] name [value [value_regex]]
$ git config [<file-option>] [type] --add name value
$ git config [<file-option>] [type] --replace-all name value [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] --get name [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] --get-all name [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
$ git config [<file-option>] [type] [-z|--null] --get-urlmatch name URL
$ git config [<file-option>] --unset name [value_regex]
$ git config [<file-option>] --unset-all name [value_regex]
$ git config [<file-option>] --rename-section old_name new_name
$ git config [<file-option>] --remove-section name
$ git config [<file-option>] [--show-origin] [-z|--null] [--name-only] -l | --list
$ git config [<file-option>] --get-color name [default]
$ git config [<file-option>] --get-colorbool name [stdout-is-tty]
$ git config [<file-option>] -e | --edit
Paramètres de configuration
Identité
Note importante : ces informations sont utilisées par Git de manière indélébile (on ne peut changer l'auteur d'un commit après-coup, ni son adresse email).
$ git config --global user.name "Xzz"
$ git config --global user.email "xzz@carnetderoot.net"
Editeur de texte
A ne pas oublier, mon éditeur de texte préféré (parce que nano par défaut, hein, sérieux...) :
$ git config --global core.editor vi
Colorisation de la sortie de git
Pour faire simple on peut activer la colorisation de plusieurs paramètres en une seule commande :
$ git config --global color.ui auto
Si on préfère agir de manière spécifique, on peut modifier les paramètres un par un
$ git config --global color.branch auto
$ git config --global color.diff auto
$ git config --global color.interactive auto
$ git config --global color.status auto
Pour plus de détails sur les paramètres disponibles et leurs effets, je vous invite à consulter la documentation de référence git-config
Vérification des paramètres
$ git config --list
user.name=Xzz
user.email=xzz@carnetderoot.net
color.ui=auto
core.editor=vi
Utilisation de Git
Utilisation courante
Initialisation d'un projet
$ cd projet
$ git init
Dépôt Git vide initialisé dans /path/to/projet/.git/
Ajout des fichiers au projet
$ git add .
Supprimer des fichiers de l'index (ne plus les suivre)
$ git rm --cached fichier_a_ne_plus_suivre.pm
Attention à ne pas oublier l'option --cached
! Si vous omettez ce commutateur, la commande supprimera aussi le fichier du système de fichier :-)
Commit initial
$ git commit -m "Mon premier commit"
[master (commit racine) 6337a68] Commit initial
89 files changed, 61074 insertions(+)
create mode 100644 MANIFEST
create mode 100644 MANIFEST.SKIP
...
Retirer des éléments de la synchronisation
Certains fichiers n'ayant pas besoin d'être synchronisés (fichiers temporaires, fichiers de swap, répertoire de sessions, etc.), on crée un fichier .gitignore contenant la liste des fichiers et répertoires à ignorer.
$ vi .gitignore
Contenu de .gitignore :
# Commentaire
# Ignorer les fichiers journaux
logs/
# Ignorer les fichiers temporaires
tmp/
# Ignorer les fichiers en cours d'edition
*.swp
...
Ajout du fichier au repository
$ git add .gitignore
$ git commit -m "Ajout du fichier .gitignore"
[master 8896d55] Ajout du fichier .gitignore
1 file changed, 6 insertions(+)
create mode 100644 .gitignore
Ignorer des fichiers déjà commités
Dans le cas où on ne veut plus synchroniser des fichiers déjà commités, ni avoir un retour lors d'un git status
, il est préférable de réindexer l'ensemble des fichiers à synchroniser.
Pour cela, le moyen radical est de supprimer l'index existant, rajouter les fichiers puis faire un commit.
Attention : penser à commiter les dernieres modifications de code avant de lancer les commandes ci-dessous
$ git rm -r --cached
$ git add .
$ git commit -m "Suppression de tous les fichiers de l'index puis re-ajout pour bonne prise en compte du fichier .gitignore"
Vérification
$ git status
Sur la branche master
rien à valider, la copie de travail est propre
Historique des commits
$ git log
Création d'un dépôt distant
Sur le serveur distant
$ cd /opt/git
$ mkdir projet.git
$ cd projet.git/
$ git --bare init
Dépôt Git vide initialisé dans /opt/git/projet.git/
Sur le poste hébergeant le dépôt local
$ cd projet
$ git init
$ git add .
$ git commit -m "Mon premier commit"
$ git remote add nom_depot user@serveur:/opt/git/projet.git
$ git push nom_depot master
Clonage du dépôt sur un autre poste
$ git clone user@serveur:/opt/git/projet.git
Pousser ses modifications
$ git push nom_depot master
Gestion des dépôts
Afficher les dépôts enregistrés
$ git remote
$ git remote -v
Ajouter un dépôt
$ git remote add nom_depot url
Modifier un dépôt
$ git remote set-url nom_depot url
Supprimer un dépôt
$ git remote rm nom_depot
Références
- Git - Mise en place du serveur
- Mémo Git : travailler avec un dépôt distant
- How to make Git “forget” about a file that was tracked but is now in .gitignore? - Stack Overflow
- Exclure des fichiers de votre dépôt Git avec gitignore