Utiliser Git : Différence entre versions

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
m (1 révision importée)
 
(Une révision intermédiaire par le même utilisateur non affichée)
Ligne 9 : Ligne 9 :
 
=Utilisation=
 
=Utilisation=
 
==add - Ajouter des fichiers dans le dépôt Git==
 
==add - Ajouter des fichiers dans le dépôt Git==
  # Porte les nouveaux fichiers à l’attention de Git pour les inclure dans les instantanés du dépôt Git.
+
  # Porte les nouveaux fichiers à l'attention de Git pour les inclure dans les instantanés du dépôt Git.
 
  # N'ajoute pas directement les nouveaux fichiers dans le dépôt, il faudra continuer avec la commande commit pour ajouter les fichiers dans le dépôt.
 
  # N'ajoute pas directement les nouveaux fichiers dans le dépôt, il faudra continuer avec la commande commit pour ajouter les fichiers dans le dépôt.
 
  <code>git add nom_du_fichier</code>
 
  <code>git add nom_du_fichier</code>
Ligne 369 : Ligne 369 :
  
 
  Source : https://github.com/alberthier/git-webui
 
  Source : https://github.com/alberthier/git-webui
 
==Désinstaller git proprement==
 
Si nécessaire, désinstaller git, git-gui, gitk, de la façon suivante.
 
 
<code>sudo apt-get purge git</code>
 
<code>sudo apt-get autoclean git</code>
 
<code>sudo apt-get clean git</code>
 
  
 
=Travail en équipe=
 
=Travail en équipe=

Version du 15 janvier 2020 à 03:15

Consulter le wiki : Accueil du wiki - Objectifs - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Sommaire

Utiliser Git

Prérequis

Installer et configurer Git

Installer et configurer Git sur Linux.

Utilisation

add - Ajouter des fichiers dans le dépôt Git

# Porte les nouveaux fichiers à l'attention de Git pour les inclure dans les instantanés du dépôt Git.
# N'ajoute pas directement les nouveaux fichiers dans le dépôt, il faudra continuer avec la commande commit pour ajouter les fichiers dans le dépôt.
git add nom_du_fichier

branch

# Permet de consulter ou de construire une nouvelle branche.
git branch
git branch version_un_de_mon_projet

cat-file

# Afficher le type d'un fichier avec la commande git cat-file et la valeur SHA-1 du fichier.
git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4

clone - Récupérer un dépôt

# Si le dépôt se trouve sur un serveur distant :
git clone utilisateur@nom_ou_ip_serveur:/chemin/vers/dépôt
# Si le dépôt se trouve sur un serveur local :
git clone /chemin/vers/dépôt

commit - Prendre en compte ses modifications sur le dépôt

# Mettre à jour le dépôt local avec les modifications effectuées.
git commit -m "Le message de commit, celui qui apparaît dans git log."
# Ajouter un "#chiffre" à la fin du commit pour pousser le changement vers une issue ouverte et suivre les modifications liées à une problématique.
git commit -m "Le message de commit, celui qui apparaît dans git log de l'issue 1. #1"
# Envoyer uniquement certains fichiers en ajoutant la liste des fichiers à la suite du message de commit :
git commit -m "Le message de commit." fichier1 fichier2
# Normalement, il faut passer par "git add" pour chaque fichier modifié.
# Les nouveaux fichiers ne seront pas pris en compte avec l'option "-a" !
# L'option "-a" permet d'ajouter automatiquement tous les fichiers modifiés déjà suivis.
# Si l'option -m n'est pas renseignée lors de la commande git add, un éditeur par défaut s'ouvrira pour permettre l'ajout d'un message de commit.
git commit -am "Le message de commit."
# Modifier un commentaire.
git commit --amend -m "Le nouveau commentaire."
# Commiter sous une autre identité.
git commit --author "Prénom Nom <mail@addresse.com>"
# Antidater un commit.
GIT_AUTHOR_DATE="2019-11-25 10:30 +100" git commit -m "Un commit antidaté."
# Lors de l'utilisation de branches, bien faire attention vers quelle branche sont envoyés les modifications.
git branch
# À ce stade, les autres développeurs ne savent pas que vous avez fait des modifications.
# Il faut pousser les modifications vers le dépôt avec push.
# Compter le nombre de commits par utilisateur.
# Ajouter l'option -e pour afficher les adresses mails.
git shortlog -sn

diff - Différence entre les fichiers

# Pour énumérer tous les conflits actuels entre la copie de travail et la dernière révision distante de votre branche :
git diff
# La commande git diff permet de lister les conflits. Pour visualiser les conflits d'un fichier :
git diff --base <nom-fichier>
# La commande suivante est utilisée pour afficher les conflits entre les branches à fusionner avant de les fusionner :
git diff <branche-source> <branche-cible>

fetch

# La commande git fetch permet à un utilisateur d'extraire tous les fichiers du dépôt distant qui ne sont pas actuellement dans le répertoire de travail local.
git fetch origin

grep

# La commande git grep permet de rechercher dans les arbres de contenu des expressions ou des mots.
git grep "www.visionduweb.fr"

instaweb

# A revoir !
# La commande git instaweb permet d’exécuter un serveur Web par interface avec le dépôt local.
git instaweb –httpd=webrick

merge - Fusionner une branche vers la branche principale

# Quand vous avez terminé de travailler sur une branche, vous pouvez fusionner vos modifications vers la branche principale master.
# La commande "git merge cats" prendrait en compte toutes les modifications effectuées sur la branche "cats" et les ajoutera à la branche master.
git merge

push - Publier ses modifications vers le dépôt

# Rendre vos modifications visibles dans le dépôt principale de Git en les poussant avec la commande push.
git push
git push origin master

pull - Récupérer les modifications effectuées sur le dépôt Git

# Permet de mettre à jour la version locale du dépôt depuis la version distante.
# Depuis votre ordinateur local, vous voulez la version la plus à jour du dépôt pour travailler dessus, on tire les modifications du dépôt distant vers le dépôt local avec la commande pull.
git pull

error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion

# Erreur lors de la mise à jour des fichiers depuis le serveur GIT vers la machine cliente :
git pull origin master
error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion :
       .htaccess
Veuillez valider ou remiser vos modifications avant la fusion.
Abandon
# Le fichier provenant du serveur GIT va remplacer le fichier .htaccess qui était présent sur la machine cliente :
git checkout --theirs .htaccess
git pull origin master

log - Afficher les modifications

# Génère le log d'une branche.
git log
# Si vous travaillez sur une branche de test et qu'un développeur modifie la branche master, vous ne serez pas affecter.
# Faire apparaître toutes les modifications.
git log --all
Documentation : https://www.git-scm.com/docs/git-log

ls-tree

# Afficher un fichier arborescent avec le nom et le mode de chaque élément, et la valeur SHA-1 du blob.
git ls-tree HEAD

rebase

# A revoir !
# La commande git rebase est utilisée pour réappliquer des commits sur une autre branche.
git rebase master

remote - Se connecter à un dépôt distant

# La commande git remote permet à un utilisateur de se connecter à un dépôt distant.
# La commande suivante répertorie les dépôts distants actuellement configurés :
git remote –v
# Connecter un dépôt local à un serveur distant :
git remote add origin ip_du_serveur

reset - Supprimer des fichiers dans le dépôt Git

# Annuler les modifications apportées depuis la dernière mise à jour avec l'option --hard. Attention cette manipulation est irréversible !
# Si index.php a été modifié par erreur et que l'on souhaite annuler ses modifications :
git reset --hard index.php
# Pour réinitialiser l’index et le répertoire de travail à l’état du dernier commit, la commande git reset est utilisée :
git reset --hard HEAD
# git reset soft mixed ou hard : https://davidzych.com/difference-between-git-reset-soft-mixed-and-hard/

rm - Arrêter ou retirer des fichiers de la copie locale

# Arrêter le suivi d'un fichier sans le supprimer de la copie locale.
# Utiliser l'option --cached conserve le fichier local mais arrête son suivi.
git rm --cached fichier_prive
# Retirer un fichier et le supprimer de la copie locale. Le statut du fichier sera 'deleted'.
git rm chemin_vers_le_fichier
# Faire réapparaître le fichier en cas de mauvaise manipulation :
git reset chemin_vers_le_fichier

show

# Afficher des informations sur tout fichier git avec la commande git show.
git show

stash - Commit temporaire

# La commande git stash aide à enregistrer les changements qui ne doivent pas être commit immédiatement. C’est un commit temporaire.
git stash

status - Vérifier le statut du dépôt

# Affiche la liste des fichiers modifiés et les fichiers qui doivent être validés pour être ajoutés ainsi que la branche du dépôt actuelle sur laquelle on travail.
git status

Abandonner le suivi pour certains fichiers

# Lors d'une phase de débogage, il est généralement peu utile de suivre les modifications de certains fichiers.
# La commande git update-index et son flag --assume-unchanged va permettre d'ignorer les changements du ou des fichiers précisés.
git update-index --assume-unchanged README.md
# Pour revenir à la normale, utiliser le flag --no-assume-unchanged :
git update-index --no-assume-unchanged README.md

Copier les fichiers inconnus de Git en dehors du répertoire de travail

# A revoir !
# Retirer l'option --exclude-standard si vous désirez exporter les fichiers ignorés par Git.
git ls-files --others --exclude-standard | cpio -pmd /chemin/de/destination

Supprimer les fichiers inconnus de Git

# A revoir !
# La commande git clean -n va lister les fichiers et répertoires concernés par le nettoyage du répertoire de travail.
git clean -n -d <path>
# Supprimer la liste des fichiers non suivis en enlevant le -n.
# Supprimer uniquement les fichiers et conserver les répertoires vides, enlever l'option -d.
# Le flag -x permet d'inclure les fichiers ignorés par Git depuis le fichier .gitignore. Pour ne supprimer que les fichiers ignorés, utiliser l'option -X.
# Tant que l'option clean.requireForce n'est pas définie à false dans votre fichier de configuration, Git contraindra git clean à ne fonctionner qu'avec les flags -n et -f.
# Soit on test avec -n soit on force l'action de nettoyage de l'arbre de travail.

archive - Exporter son projet dans une archive ZIP ou TAR.GZ

# Pour obtenir une archive d'une version de votre projet, utiliser git archive.
git archive --format=zip --prefix=mon_projet-1.0/ -9 1.0 > /chemin/de/destination/mon-projet-1.0.zip
# Connaître la liste des formats supportés :
git archive --list
# --format permet de spécifier le format de l'archive.
# --prefix va préfixer tous les noms de fichiers et dossiers. Ne pas oublier le slash terminal si vous souhaitez regrouper les documents dans un dossier.
# -9 est une option spécifique du format d'exportation ZIP. De 0 à 9, il détermine le niveau de compression.
# 1.0 est le nom du tag. Ici c'est la version 1.0 qui sera récupérée. Vous pouvez également exporter des branches, le HEAD et autres tree-ish.
# Pour finir on redirige le tout dans un fichier.
# Pour exporter les fichiers contenu dans le répertoire d'une branche donnée la commande devient :
git archive --format=zip --prefix=mon_projet-dev/ -9 dev:src/ > /chemin/de/destination/mon_projet-dev.zip
# L'export au format TAR.GZ se fait de la manière suivante :
git archive --format=tar --prefix=mon_projet-1.0/ 1.0 | gzip > /chemin/de/destination/mon-projet-1.0.tar.gz
# Exporter la branche master vers une archive au format tar.
git archive --format=tar master

Publier ses modifications vers plusieurs dépôts

Récupérer un correctif, un commit, sur toutes les branches, depuis la machine locale.
Ici, il est surtout question de récupérer le fichier README, pour conserver un README identique.
On utilise la branche de développement, par exemple, la branche phpsecinfo-zeroocool-v0.2.1 pour effectuer les modifications du README.
On pousse les correctifs comme d'habitude. On obtient un ID pour l'historique de la transaction depuis l'historique de Github :
https://github.com/ZerooCool/phpsecinfo/commit/ca82f1c0a9825afac5690619775bd2d59e8123fa#diff-04c6e90faac2675aa89e2176d2eec7d8
L'ID a utiliser est le suivant : ca82f1c0a9825afac5690619775bd2d59e8123fa
On se positionne sur la branche devant être modifiée, puis, on cherry-pick le commit déjà effectué sur la branche en développement, ce qui pousse le commit sur la branche sélectionnée, ici, phpsecinfo-v0.2.1
git checkout phpsecinfo-v0.2.1
git cherry-pick ca82f1c0a9825afac5690619775bd2d59e8123fa
Il semble que seul le commit soit poussé, ce qui permettrait de conserver un code différent sur les autres lignes du fichier de la branche de destination.
Le fichier sur la machine locale est maintenant à jour, et, identique à la version de la branche de développement.
Il faut encore pousser la branche locale vers la branche distante sur Github.
Inutile ici de faire un commit, on pousse directement.
git push origin phpsecinfo-v0.2.1
On répète cette étape pour chaque branche devant recevoir le correctif de README.

Annuler un commit - push

Source : http://blog.mathieu-leplatre.info/git-annuler-proprement-un-commit-apres-un-push-fr.html

Supprimer un tag du dépôt distant

# Le marquage est utilisé pour marquer des commits spécifiques avec des appels simples.
git tag 1.1.0 id_du_commit
# La commande git push --tags ne pousse pas les tags supprimés localement.
# Pour supprimer un tag sur le serveur distant, reprendre la syntaxe de suppression d'une branche :
git push origin :1.1.0
# Il est également possible d'utiliser la commande git tag et son flag -d :
git tag -d 1.1.0

Créer des branches

# Travailler sur une branche locale qui sera liée à la branche distante avec la commande git branch.
# Le travail sera toujours effectué sur la branche locale et poussé vers la branche distante.
# Créer une nouvelle branche locale a partir de la révision actuelle et s'y rendre :
git checkout -b ma_super_branche
# Créer une branche mais rester sur la branche actuelle :
git branch ma_super_branche
# Avant de faire un pull ou un push, visualiser la branche sur laquelle on se trouve :
git branch
# Afficher les branche distante :
git branch -a
# Changer de branche :
git checkout nom_de_la_branche
# Les branches peuvent être fusionnées.
# Pour fusionner toutes vos modifications dans une branche nom_de_la_branche_de_destination, il faut que votre répertoire de travail soit propre, c'est à dire que git status n'affiche aucun fichier en attente devant être ajouté au dépôt.
# Un git branch vous indiquera à l'issue de cette manipulation que vous vous trouvez sur nom_de_la_branche_de_destination.
git checkout nom_de_la_branche_de_destination
git pull . nom_de_la_branche_à_merger
# Il est possible que des conflits soient présents.
# Résoudre les conflits pour que la branche de développement nom_de_la_branche_à_merger soit fusionnée vers la branche nom_de_la_branche_de_destination.

Supprimer une branche

# Supprimer une branche locale avec l'option "-d" de "git branch".
# Si la branche contient des commits non fusionner, utiliser l'option -D.
git branch -d ma_branche
# Supprimer une branche du dépôt distant s'effectue de la même manière que pour une publication à l'aide de la commande git push mais en précédant le nom de la branche d'un double point.
git push origin :ma_branche

Maintenance

# Au fur et a mesure de vos commits, votre copie locale du dépôt s'encrasse.
# Il est bon de faire le ménage de temps en temps.

fsck

# Vérifier l'intégrité du système de fichiers git.
# Tous les fichiers corrompus seront identifiés.
git fsck

gc

# Cette commande lance entre autre, git repack et git prune (gc = garbage collect) :
# La première va recompresser les fichiers, et s'assurer que le dépôt n'est pas fragmenté.
# La deuxième permet de faire le ménage dans les branches distantes non utilisées : suppression des branches locales de suivi qui pointent sur une branche distante supprimée.
# Cette commande n'affectera pas votre travail, elle rendra l’accès a votre dépôt local plus rapide, et diminuera l'espace occupé par le dossier .git.
# Pour optimiser le dépôt en supprimant les fichiers inutiles et les optimiser :
git gc

prune

# Les fichiers qui n’ont pas de pointeurs entrants seront supprimés.
git prune

A reprendre

Pour lancer le mode graphique git-gui, la commande qui fonctionne chez moi depuis le répertoire de travail est git gui.
Commandes Spécifiques Git
Le fait que Git ait été conçu avec un gros projet comme Linux, il existe un paquet de commandes Git. Néanmoins, pour utiliser les basiques de Git, vous n’aurez besoin de connaître que quelques termes. Ils commencent tous de la même façon avec le mot “git”.
git help : Oublié une commande ? Saisissez-ça dans la ligne de commande pour ramener les 21 commandes les plus courues de Git. Vous pouvez aussi être plus spécifique et saisir “git help init” ou tout autre terme pour voir comment utiliser et configurer une commande spécifique git.

Créer le git commit initial

En ligne de commande

cd /home/user/path/GIT/ (Se positionner dans le dossier de la Working copy.)
echo "Créer un fichier" > README (Création d'un fichier README.)
git add README (Ajout du fichier README à la Staging area.)
git commit -m "Mon premier commit." (Commit de la Staging area avec le commentaire « Mon premier commit. ». Le premier commit a pour effet de créer la branche « master » et d'y ajouter le commit.)
En réponse dans la console :
[master (commit racine) 7b960a7] GIT DEPOT 001 First - En transition
1 file changed, 1 insertion(+)
create mode 100644 README
Manuel des commandes à télécharger depuis Développez : http://loic-guibert.developpez.com/tutoriels/git/get-started/fichiers/git-cheatsheet.pdf

Avec git gui

Utiliser l'utilitaire graphique git gui pour créer facilement le premier commit depuis le répertoire de travail.
git-gui facilite les commit : ajout/retrait de fichiers dans la Staging area, commit avec un commentaire.
Lancer avec la commande git gui
Avec git-gui, les utilisateurs qui vont partager des fichiers entre Linux et Windows vont avoir des problèmes de retour chariot.
Rester vigilant lorsque plusieurs systèmes d'exploitation utilisent le même dépôt.
Au premier lancement de git gui, il est possible d'avoir le message suivant :
Erreur : No word lists can be found for the language "fr_FR".
Il faut installer le paquet aspell-fr qui contient le dictionnaire français pour aspell.
sudo apt install aspell-fr

Avec gitk

L'utilitaire gitk n'est pas très beau visuellement.
L'utilitaire git-gui a besoin de gitk pour pouvoir gérer les historiques de versions.
Le travail local est maintenant possible grâce à git :
Suivi des modifications des données avec l'historique, création de branches, fusion, retour en arrière...
Gitk est vraiment Rox.
Définition: ROX sont les initiales de "RISC OS on X". C'est un logiciel libre distribué selon les termes de la licence GNU GPL.

Utiliser Git webui

D'autres outils existent pour utiliser Git.
Git webui permet d'utiliser Git en mode graphique depuis un navigateur web.
Mise en place de façades : Serveur HTTP/HTTPS pour l'accès au dépôt, application web de navigation dans le dépôt...
Source : https://github.com/alberthier/git-webui

Travail en équipe

Pour commencer simplement nous mettons tout le monde au même niveau.
Pas de gestion de rôles ni de droits sur les dépôts.
Mise en place d'un dépôt central de référence, dépôt public du projet qui va contenir le travail d'équipe.
Chaque développeur a en local une copie liée au dépôt de référence.
Chaque développeur travaille sur sa branche locale et rapatrie régulièrement les modifications du dépôt de référence pour être à jour.
Il fait l'intégration de son travail sur la branche publique concernée (rebase/merge...).
Il pousse les modifications de la branche publique sur le dépôt de référence (origin/master).
Ces dépôts contiennent, au minimum, une branche locale de travail.

Organiser le dépôt central.

Ne pas avoir à saisir plusieurs fois le mot de passe utilisateur de Git

Utiliser Credential Helper

# Le credential helper permet de stocker en mémoire le mot de passe utilisateur de Git pendant 15min par défaut.
git config --global credential.helper cache
# Le credential helper permet de stocker en mémoire le mot de passe utilisateur de Git pendant 60min.
git config --global credential.helper "cache --timeout=3600"
Ok-ko.png Source : https://blog.lecacheur.com/2015/11/05/git-le-b-a-ba-memoriser-son-mot-de-passe/

Bibliographie

Ok-ko.png Source : https://rogerdudler.github.io/git-guide/index.fr.html
Ok-ko.png S’entraîner avec Git : http://onlywei.github.io/explain-git-with-d3/
Ok-ko.png Essayer de corriger les fins de ligne avec git filter-branch, mais sans chance : https://www.ipgirl.com/4512/essayer-de-corriger-les-fins-de-ligne-avec-git-filter-branch-mais-sans-chance.html

A suivre

Source du tutoriel : http://loic-guibert.developpez.com/tutoriels/git/get-started/
Tutoriel complémentaire : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/git_linux0
Installer et configurer un serveur GIT sous Linux : https://www.val-r.fr/geek/softwares/git/installer-et-configurer-un-serveur-git-sous-linux

Les bases de GIT pour versionner le code source

Ok-ko.png https://git-scm.com/book/fr/v1/Les-bases-de-Git
Ok-ko.png http://git-scm.com/book/fr/v2
Ok-ko.png http://www.git-scm.com/book/fr/v2/Les-bases-de-Git-Travailler-avec-des-d%C3%A9p%C3%B4ts-distants
Ok-ko.png Enregistrer les modifications dans le dépôt
Ok-ko.png https://git-scm.com/book/fr/v1/Les-bases-de-Git-Enregistrer-des-modifications-dans-le-d%C3%A9p%C3%B4t
Ok-ko.png Liste des hébergeurs GIT en ligne et de leurs options : https://git.wiki.kernel.org/index.php/GitHosting
Ok-ko.png Télécharger le PDF Visual cheat-sheet Git (Sur Développez, avec accès membre.)
Ok-ko.png http://www.developpez.com/telechargements/auth/id/424de0e60f44247edbd7713c5364e547
Ok-ko.png http://guidella.free.fr/General/utilisationGit.html
Ok-ko.png Git et git gui : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/git_linux0

Cheatsheet

Ok-ko.png Git Cheatsheet : https://ftp.visionduweb.fr/DOCUMENTATIONS/PROGRAMMATION/GIT%20cheatsheet.pdf
Ok-ko.png Getting started with Git : https://riptutorial.com/git

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Les informations présentes sur ce wiki sont issues d'une recherche personnelle.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
Pour participer sur le forum, créer un compte utilisateur depuis le forum. Aller sur le Forum.

VALORISER LE WIKI

Valoriser le contenu partagé sur 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 :
Gagner des Altcoins - Miner des Altcoins.