Installer et configurer Git sur Linux

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Installer et configurer Git sur Linux

GIT est un logiciel libre de gestion de versions décentralisé qui permet de versionner son code source pour suivre l'historique de son évolution.
Créé par Linus Torvalds, Git est distribué selon les termes de la licence publique générale GNU version 2.
En avril 2016, GitHub a annoncé avoir dépassé les 14 millions d'utilisateurs et plus de 35 millions de dépôts de projets le plaçant comme le plus grand hébergeur de code source au monde. 
Le 4 juin 2018, Satya Nadella, PDG de Microsoft, annonce que son entreprise Microsoft est dans un processus d'acquisition de GitHub pour 7,5 milliards de dollars.

Quelques définitions

Le dépôt à proprement parler est également appelé GIT repository.
GIT repository.
Un commit enregistre les modifications apportées depuis le commit précédent. Il se base sur l'index, ou, staging area.
Un push va envoyer les modifications vers le dépôt de référence.
Un clone va permettre de récupérer le dépôt de référence.
Un pull va permettre de récupérer les dernières modifications effectuées par une équipe, depuis le dépôt de référence.
La copie de travail est le répertoire de travail contenant les fichiers du projet.
Git enregistre la branche de travail utilisée, la référence head, pour placer correctement le prochain commit.

Installation sur Debian

# Installer Git :
sudo apt-get install git
# Installer le manuel pour Git :
sudo apt-get install git-man
# Installer l'utilitaire graphique gitk pour gérer la staging area et visualiser les branches et les commits :
sudo apt-get install gitk
# Installer l'utilitaire graphique git-gui pour consulter l'historique et pour gérer le dépôt :
sudo apt-get install git-gui

Désinstaller Git proprement

# Désinstaller git de la façon suivante :
sudo apt-get purge git
sudo apt-get autoclean git
sudo apt-get clean git
# Si nécessaire, supprimer les paquets suivants également :
git-man
gitk
git-gui

Configurer GIT

Configurer un profil utilisateur pour Git

# Les informations renseignées apparaîtrons dans l'historique des commits de Git.
git config --global user.name "Zer00CooL"
git config --global user.email "mail@visionduweb.com"

Définir un répertoire de travail Git

La commande git init initialise un nouveau dépôt Git.
Le dossier initialisé avec git init devient un répertoire de travail Git et acceptera alors les commandes Git.
git init /home/utilisateur/chemin_du_dossier/GIT/
# Affiche :
Dépôt Git vide initialisé dans /home/utilisateur/CODER/GIT/.git/
Le dépôt est créé dans le répertoire /home/utilisateur/CODER/GIT/.
GIT peut maintenant gérer les versions des fichiers dans le dépôt.

Définir les droits CHOWN et CHMOD sur un répertoire de travail Git

# Donner les dossiers et fichiers Git au simple utilisateur utilisé sur le système ayant le droit d'effectuer un commit vers le serveur Git.
sudo chown -R user:user .git/
sudo chown user:user .gitignore
# Deux solutions sont a privilégier pour protéger le répertoire .git et le fichier .gitignore depuis un site mis en ligne en production.
# Il est possible d'ajouter une règle dans le VirtualHost ou depuis le fichier .htaccess pour interdire la consultation depuis l'extérieur, depuis un navigateur.
# Modifier les droits CHMOD pourrait être plus pertinent pour ne pas avoir à surcharger le serveur avec de nouvelles règles dans le VirtualHost.
# Il est possible de modifier les droits CHMOD depuis le répertoire contenant le site et le dossier .git :
# Les droits pour le dossier et les sous dossiers de .git/ en 700.
# Les droits pour les fichiers .git/ et .gitignore en 600.
sudo find ./.git/ -type d -exec chmod 700 {} \;
sudo find ./.git/ -type f -exec chmod 600 {} \;
sudo find ./.gitignore -type f -exec chmod 600 {} \;

Ajouter ou modifier des options de configuration

# La commande "git config" permet de configurer Git.
# Des exemples de commandes sont proposées, notamment :
# --global              utiliser les fichier de configuration global
# --system              utiliser le fichier de configuration du système
# --local               utiliser le fichier de configuration du dépôt
git config
# Connaître la configuration actuelle de Git :
git config --list
git config --list --show-origin
# Connaître le statut de Git :
git status

color pour activer la colorisation du terminal

# Activer la colorisation par défaut :
git config --global color.ui true
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.interactive auto
Des paramètres peuvent surcharger les couleurs pour certains éléments de l'affichage.
Régler les couleurs des informations du diff avec un texte bleu gras sur fond noir :
git config --global color.diff.meta "blue black bold"
Valeurs autorisées pour les couleurs : normal, black, red, green, yellow, blue, magenta, cyan ou white.

core.editor

# Définir l'éditeur par défaut :
git config --global core.editor emacs

commit.template

# Créer un template pour le message de commit par défaut :
git config --global commit.template $HOME/$PATH/.gitmessage.txt
# Créer le fichier .gitmessage.txt contenant les lignes suivantes :
# Exemple de template :
Titre : 

Description : 

[Ticket: #012345]
# Renseigner correctement le ticket.
# Ne rien renseigner annulera le commit.
# Les commentaires avec # ne seront pas ajoutés.
# Ajouter des notes complémentaires pour optimiser les actions.
# Fin de l'exemple de template.

core.pager

# La référence est fixée à less par défaut mais elle peut être fixée avec more ou encore désactivée avec une chaîne vide.
# Si le pager est désactivé, Git affichera la totalité du résultat de toutes les commandes quelque soit la longueur du résultat.
git config --global core.pager 

user.signingkey

# Annoter des tickets signés en définissant sa clé GPG de signature en paramètre de configuration :
git config --global user.signingkey <gpg-key-id>
# Les tickets peuvent être signés sans avoir à spécifier sa clé PGP à chaque fois :
git tag -s <nom-étiquette>

core.excludesfile

Vérifier plus en détail.
Similaire à .gitignore mais pour les fichiers.
Ajouter des règles dans le fichier .gitignore du projet pour indiquer à Git de ne pas historiser certains fichiers.

core.filemode

# Ignorer les modifications CHMOD sur les fichiers et répertoires.
# Par défaut, lorsque la valeur chmod d'un fichier est modifié, GIT considère que le fichier a été modifié.
# Pour désactiver cette fonctionnalité, il faut modifier la configuration core.filemode :
git config core.filemode false

help.autocorrect

En cas de faute de frappe sur une commande, Git affichera une liste de commandes ressemblantes.
Git lancera automatiquement la commande si une seule commande ressemblante a été trouvée avec le paramètre help.autocorrect à "1".
git com
git: 'com' is not a git-command. See 'git --help'.

Did you mean this?
     commit

core.whitespace

Git est paramétré par défaut pour détecter et corriger certains problèmes de blancs.
La correction de deux problèmes est activée par défaut et peut être désactivée et celle des deux autres n'est pas activée par défaut mais peut être activée.

receive.fsckObjects

Par défaut, Git ne vérifie pas la cohérence entre les objets qu'on lui pousse.
C'est une opération relativement lourde qui peut énormément allonger les poussées selon la taille du dépôt ou de la poussée.
Git peut vérifier la cohérence des objets à chaque poussée, somme de contrôle, objets valides, en utilisant le paramètre receive.fsckObjects à true.
git config --system receive.fsckObjects true

receive.denyNonFastForwards

Dans le cas d'un rebasage, on peut forcer la mise à jour de la branche distante en ajoutant l'option -f à la commande.
Désactiver la possibilité de forcer la mise à jour des branches distantes autrement qu'en avance rapide avec receive.denyNonFastForwards.

git config --system receive.denyNonFastForwards true

receive.denyDeletes

Une alternative à denyNonFastForwards consiste à effacer la branche puis à la repousser avec ses nouvelles références.
Pour interdire totalement l'effacement de branche et d'étiquette, utiliser receive.denyDeletes passé à true.
Pour effacer des branches distantes il faudra effacer manuellement les fichiers de référence sur le serveur.
git config --system receive.denyDeletes true

Fichiers de configuration de Git

.gitconfig

Le fichier .gitconfig est spécifique à chaque utilisateur.
Il peut être configuré avec des commandes "--global" ou en éditant le fichier de configuration directement.
## Pour Windows :
# Ajouter les lignes suivantes dans le fichier ".gitconfig" du dépôt Github déjà existant localement.
# C:\Users\NOM-HOTE\Users\Documents\Projet\.gitconfig (?)
## Pour Linux :
# Ajouter les lignes suivantes dans le fichier ".gitconfig" du dépôt Github déjà existant localement.
# /home/Users/Dossier/Projet/.gitconfig

# La configuration du profil Git pour le projet local.
[user]
name = ZerooCooL
email = g2pc@visionduweb.com

.git/config - Pour un dépôt spécifique

Ces valeurs sont spécifiques à un unique dépôt.
Chaque niveau surcharge le niveau précédent.
Les valeurs de .git/config écrasent les autres configuration.

.gitignore

Utiliser le fichier .gitignore pour ignorer des fichiers lors de la synchronisation.

Convertir les délimiteurs de fin de ligne pour utiliser Git avec Linux et Windows

Convertir les délimiteurs de fin de ligne pour utiliser Git avec Linux et Windows.

Installer et configurer un serveur SSH pour pousser vers un dépôt Git distant

Nécessite d'installer openssh-server et de configurer hosts.deny et hosts.allow.
Ouvrir le port SSH sur la box qui délivre la connexion internet.
Source du tutoriel : http://loic-guibert.developpez.com/tutoriels/git/get-started/

Créer un utilisateur système pour Git

Cet utilisateur système zer00cool dédié à Git sera utilisé pour se connecter au dépôt via le serveur SSH.
Configurer le serveur SSH pour utiliser Git avec l'utilisateur Git zer00cool : Utiliser Git avec SSH et un utilisateur Git local (zer00cool).

Ne pas utiliser un nom d'utilisateur avec des majuscules

sudo adduser --no-create-home --home /var/git --shell /bin/bash Zer00CooL

[sudo] Mot de passe de zencool : 
adduser : veuillez entrer un nom d'utilisateur identique à l'expression régulière configurée
via la variable de configuration NAME_REGEX[_SYSTEM]. Utiliser l'option « --force-badname »
pour assouplir cette vérification ou reconfigurer NAME_REGEX.
Les majuscules provoquent une erreur, on relance la commande avec un nom d'utilisateur en minuscules.

Utiliser un nom d'utilisateur avec des minuscules

sudo adduser --no-create-home --home /var/git --shell /bin/bash zer00cool

[sudo] Mot de passe de l'utilisateur root : 
Ajout de l'utilisateur « zer00cool » ...
Ajout du nouveau groupe « zer00cool » (1001) ...
Ajout du nouvel utilisateur « zer00cool » (1001) avec le groupe « zer00cool » ...
Le répertoire personnel « /var/git » n'a pas été créé.
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur zer00cool
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []:
N° de bureau [0]:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:

Information complémentaires

Si nécessaire : changer les informations d'un utilisateur chfn.
Si nécessaire : changer le mot de passe d'un utilisateur sudo passwd zer00cool.

Créer le dossier git dans le dossier var

su
mkdir /var/git
chown zer00cool:zer00cool /var/git
chmod 2775 /var/git
Il est possible de mettre des droits moins permissif avec chmod 775 -R /var/git

Créer et initialiser le dépôt sans working copy

L'option --bare permet de ne pas avoir de working copy.
Nommer Projets.git à votre convenance.
su zer00cool
git init --bare /var/git/Projets.git
Dépôt Git vide initialisé dans /var/git/Projets.git/

Tester le dépôt

Récupérer le dépôt

cd /tmp
Changer :22 par le port utilisé pour SSH.
git clone ssh://zer00cool@127.0.0.1:22/~/Projets.git Projets
Clonage dans 'Projets'...
Si le clonage reste figé, peut être qu'il faut diminuer la sécurité de hosts.deny ( J'ai supprimé Denyhosts :/ sans changement. )
Paramétrer le client SSH comme le serveur ? Comment ?
Le message ci-dessous est finalement affiché.
Le problème serrait le blocage de SSH ? Pourtant, SSH est autorisé dans hosts.allow. ( Denyhosts supprimé. Ce n'est plus lui le problème. )
Fail2ban : Autorisation de l'ip de localhost dans la liste blanche. ( Pas d'amélioration. )
iptables port 22 ? OUI !!! En supprimant toutes les règles avec : iptables -F Le clonage me redemande :
git clone ssh://zer00cool@127.0.0.1:22/~/Projets.git Projets
Clonage dans 'Projets'...
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:ZWG9d+p7lVhxqv7ZgX+Q4WlXRxhw3/65BHvESsMXT3Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
dispatch_protocol_error: type 7 seq 3
dispatch_protocol_error: Connection to 127.0.0.1 port 22: Broken pipe
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
zer00cool@Alienware-17-R3 /tmp $ git clone ssh://zer00cool@127.0.0.1:22/~/Projets.git Projets
Clonage dans 'Projets'...
zer00cool@127.0.0.1's password: 
warning: Vous semblez avoir cloné un dépôt vide.
Vérification de la connectivité... fait.
zer00cool@Alienware-17-R3 /tmp $ 
git clone ssh://zer00cool@127.0.0.1:22/~/Projets.git Projets
git clone ssh://git@127.0.0.1:22/~/Projets.git Projets
Clonage dans 'Projets'...
ssh_exchange_identification: read: Connection reset by peer
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Ici, le fichier hosts.deny me bloquait SSH car configuré en mode parano, je bloquais toutes les connexions. Autoriser SSH depuis hosts.allow.
cd /tmp
git clone ssh://zer00cool@127.0.0.1:22/~/Projets.git Projets
Clonage dans 'Projets'...
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:QAfc3awmrnSUyMWsJ6PIL48dJmXUVsX26D4BSaZumSs.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
zer00cool@127.0.0.1's password: 
warning: Vous semblez avoir cloné un dépôt vide.
Vérification de la connectivité... fait.
La clé ssh est stockée dans le fichier /var/git/.ssh/known_hosts

Commit initial

cd /tmp/
# Créer un dossier Projets
mkdir Projets
cd /tmp/Projets
echo "Répertoire contenant les sources du projet XXX" > README
git add README
git commit -m "commit initial"
Il se peut que Git demande ici à nouveau les informations de l'utilisateur :
git config --global user.email "mail@visionduweb.com"
git config --global user.name "zer00cool"
to set your account's default identity.
Omit --global to set the identity only in this repository.
Pour utiliser les informations uniquement sur ce dépôt, ne pas ajouter --global.
Relancer le git commit.
git push origin master:master
Suppression du dossier Projets et de son contenu.
cd ..
rm -rf Projets

Utiliser Git

Utiliser Git.

Bibliographie

Générer une nouvelle clé SSH et l'ajouter à ssh-agent : https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/
Git : Apprendre une technique pour faire des dépôts distants sans accès réseau : https://xebia.developpez.com/tutoriels/git/depot-dossier-sans-acces-reseau/
Introduction (très) rapide à Git : https://raspbian-france.fr/cours/slides-git.html#/
Tutoriel complémentaire : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/git_linux0

Voir également

Les problématiques hiérarchiques (gestion des différents rôles/droits des utilisateurs)
Les aspects sécurité - mise en place de clé publique/privée pour les accès SSH, gestion des utilisateurs sur le dépôt.

Sourcetree pour Mac OSX

Le logiciel pour OSX Sourcetree est une excellente interface graphique pour git qui supporte git-flow.

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.