Installer et configurer Git sur Linux
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.
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 utilisateurchfn
. Si nécessaire : changer le mot de passe d'un utilisateursudo passwd zer00cool
.
Créer le dossier git dans le dossier var
sumkdir /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 Projetsmkdir 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 PARTAGERBienvenue 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 WIKISoutenir 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 NUMERIQUEObtenir gratuitement de la monnaie numérique : Miner de la cryptomonnaie. |