Utiliser Git : Différence entre versions

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
 
(Aucune différence)

Version actuelle datée du 11 octobre 2019 à 18:44

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

Utiliser Git

Prérequis

Installer et configurer Git

Installer et configurer Git sur Linux.

Utilisation

branch

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

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

# N'ajoute pas directement les nouveaux fichiers dans le dépôt.
# Porte les nouveaux fichiers à l’attention de Git pour les inclure dans les instantanés du dépôt Git.
git add nom_du_fichier

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

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

git reset soft mixed ou hard : https://davidzych.com/difference-between-git-reset-soft-mixed-and-hard/
# 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

diff - Différence entre les fichiers

# Faire un diff unifié entre votre copie de travail et la dernière révision récupérée de votre branche :
git diff

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é mais l'option "-a" permet d'ajouter automatiquement tous les fichiers modifiés déjà suivis. 
# Les nouveaux fichiers ne sont pas pris en compte avec "-a".
git commit -am "Le message de commit."
#  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.
# Quand vous utiliserez les branches, faites bien attention à vérifier dans quelle branche vous envoyez vos modifications en faisant un
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.

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

log - Afficher les modifications

# 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

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

Créer des branches

Avant de faire un pull ou un push, visualiser la branche sur laquelle on se trouve.
git branch
Créer une nouvelle branche 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
Afficher les branche distante
git branch -a  
Pour travailler sur une des branches présentes sur Github, il faut créer une branche locale qui sera liée à la branche distante avec la commande git branch.


(ou git checkout -b, en ajoutant un un argument, le nom de la branche distante

git checkout -b mwsaz origin/nom-de-votre-branch

Ici, j'ai demander a creer une branche recherche calquee sur la branche recherche disante. Ainsi, quand je ferai git pull, ma branche locale sera mise a jour. On ne travaillera jamais sur des branches distantes.

Maintenant que vous avez une vague idee du concept de branches locales/distantes, vous devez vous demander comment envoyer une branche locale sur le serveur. On se place donc dans le cas ou vous voulez creer une nouvelle branche, qui n'existe pas sur le serveur. Il vous faut tout dabord creer une branche locale, puis la pusher sur le serveur :

git checkout -b nom_de_la_branche # Creation de la branche locale

Les branches peuvent etre fusionnees, supprimées,
n'hesitez pas pour a en creer des que vous vous lancez dans un travail setendant sur plusieurs commits.
Pour changer de branche, il vous faut faire git checkout nom_de_la_branche. Il faut que votre repertoire de travail soit propre, c'est à dire que git status naffiche aucun fichier comme modified. Un git branch vous indiquera à l'issue de cette manipulation que vous vous trouvez sur nom_de_la_branche. Si vous souhaitez changer

Fusionner des branches

Pour fusionner toutes vos modifications avec la branche par defaut, assurez de n'avoir plus aucun fichier modifié en attente (faites un git status et assurez-vous qu'il ne renvoie rien).
Puis passez à la branche par defaut, et enfin fusionnez les deux :

git checkout master

git pull . nom_de_la_branche_à_merger

Attendez, resolvez les conflits. Voila, votre branche de developpement a ete fusionnee dans votre branche par defaut.
Vous pouvez aussi faire l'inverse. Si par exemple vous corrigez un bug dans la branche principale,
il y a de fortes chances qu'il soit aussi dans les autres branches.
Dans ce cas, vous devez vous placer dans la branche de developpement, et comme precedemment :

git checkout ma_branche

git pull . master

Supprimer des branches
Pour supprimer une branche locale, passer l'option "-d" a "git branch".
git branch -d ma_branche

Cette commande ne fonctionnera que si cette branche a ete fusionner, sans quoi vous perdriez des commits. Pour la supprimer si elle contient des commits non fusionner, il faut utiliser l'option -D. En faisant cela, ferez disparaître les modifications de cette branche qui n'ont pas ete fusionnees !
N'utilisez cette option que si vous savez ce que vous faites. Pour supprimer une branche distante, il y a deux etapes : supprimer votre branche locale, qui la suivait ; supprimer la branche distante.

git branch -d ma_branche

git push origin :ma_branche

Vous pouvez aussi ne supprimer que la branche distante,
la branche locale correspondante sera supprimer au prochain git gc.

Maintenance

Au fur et a mesure de vos commits, votre copie locale du dépôt s'encrasse.
Les fichiers sont stockés en piles, et, il est bon de faire le ménage de temps en temps.
git 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 fragmente.
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.
git-log
https://www.git-scm.com/docs/git-log

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 init : Initialise un nouveau dépôt Git. Jusqu’à ce que vous exécutiez cette commande dans un dépôt ou répertoire, c’est simplement un répertoire normal. Seulement après avoir entré cette commande, il accepte les commandes Git qui suivent.
git config : raccourci de “configurer,” ceci est tout particulièrement utile quand vous paramétrez Git pour la première fois.
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.
git status : Vérifie le statut de votre repository. Voir quels fichiers sont à l’intérieur, quels sont les changements ayant besoin d’être gardés en mémoire, et sur quelle branche du repository vous êtes en train de travailler.
git checkout : Permet littéralement de rapatrier un dépôt dans lequel vous n’êtes pas. C’est une commande de navigation qui vous laisse migrer vers le répertoire que vous voulez rapatrier. Vous pouvez utiliser cette commande sous la forme git checkout master pour rapatrier la branche master, ou git checkout chats pour rapatrier une autre branche.
git merge : Quand vous avez terminé de travailler sur une branche, vous pouvez fusionner vos modifications vers la branche master, qui est visible pour tous les collaborateurs. git merge cats prendrait toutes les modifications que vous avez faites sur la branche “cats” et les ajoutera à la la branche master.

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

Désinstaller git proprement

Si nécessaire, désinstaller git, git-gui, gitk, de la façon suivante.
sudo apt-get purge git
sudo apt-get autoclean git
sudo apt-get clean git

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.
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.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

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.
Consulter le miroir du wiki depuis Planet Hoster : Le miroir du wiki version du 12 Juillet 2019.