Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
fr:logiciel:programmation:git:10_commandes [2021/02/15 15:58] – ↷ Page déplacée de logiciel:programmation:git:10_commandes à fr:logiciel:programmation:git:10_commandes admin | logiciel:programmation:git:10commandes:start [2021/04/04 18:27] – ↷ Page déplacée et renommée de logiciel:programmation:git:10_commandes à logiciel:programmation:git:10commandes:start admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== GIT : Utilisation simplifiée en dix commandes ====== | ====== GIT : Utilisation simplifiée en dix commandes ====== | ||
- | ====== Webographie | + | ===== Webographie ===== |
- [[http:// | - [[http:// | ||
- | ===== Pré-requis | + | ==== Pré-requis ==== |
- un ordinateur de préférence sous Linux. (Nous ne traitons pas de Windows ici | - un ordinateur de préférence sous Linux. (Nous ne traitons pas de Windows ici | ||
Ligne 11: | Ligne 11: | ||
- un projet en développement, | - un projet en développement, | ||
- | ===== Allons-y ! ===== | + | ==== Allons-y ! ==== |
- | ==== "git init" : initialisation d'une base git vide ==== | + | === "git init" : initialisation d'une base git vide === |
Avant de commencer à utiliser la puissance de git, il faut créer un dépôt git vide et dire quels sont les fichiers à suivre. | Avant de commencer à utiliser la puissance de git, il faut créer un dépôt git vide et dire quels sont les fichiers à suivre. | ||
Ligne 25: | Ligne 25: | ||
Ensuite, lancer les 2 prochaines commandes présentées ci-dessous. | Ensuite, lancer les 2 prochaines commandes présentées ci-dessous. | ||
- | ==== "git add" : Ajout de fichiers au référentiel git ==== | + | === "git add" : Ajout de fichiers au référentiel git === |
L' | L' | ||
Ligne 33: | Ligne 33: | ||
Cela va ajouter au dépôt git, de manière récursive, tous les fichiers du dossier actuel et de ses sous-dossiers. | Cela va ajouter au dépôt git, de manière récursive, tous les fichiers du dossier actuel et de ses sous-dossiers. | ||
- | ==== "git commit" | + | === "git commit" |
C'est une commande qu'on va utiliser souvent. | C'est une commande qu'on va utiliser souvent. | ||
Ligne 55: | Ligne 55: | ||
Maintenant, nous allons avancer et apprendre quelques commandes de plus. | Maintenant, nous allons avancer et apprendre quelques commandes de plus. | ||
- | ==== "git log" : Affichage du journal de validation. | + | === "git log" : Affichage du journal de validation. === |
on peut relire tous les commits faits jusqu' | on peut relire tous les commits faits jusqu' | ||
Ligne 70: | Ligne 70: | ||
De tous ceux-ci, le premier élément, l' | De tous ceux-ci, le premier élément, l' | ||
- | ==== "git status" | + | === "git status" |
Lors du codage, on peut voir toutes les modifications avant de se résoudre à les stocker dans le dépôt git. C'est ce que permet cette commande : | Lors du codage, on peut voir toutes les modifications avant de se résoudre à les stocker dans le dépôt git. C'est ce que permet cette commande : | ||
Ligne 78: | Ligne 78: | ||
La commande ci-dessus liste tous les fichiers qui ont changé depuis la dernière validation. | La commande ci-dessus liste tous les fichiers qui ont changé depuis la dernière validation. | ||
- | ==== "git diff" : Trouver les différences entre les commit | + | === "git diff" : Trouver les différences entre les commit === |
Outre la seule visualisation de fichiers qui ont changé, on peut vouloir visualiser les différences dans le code source. C'est ce que fait la commande : | Outre la seule visualisation de fichiers qui ont changé, on peut vouloir visualiser les différences dans le code source. C'est ce que fait la commande : | ||
Ligne 98: | Ligne 98: | ||
Cette commande va afficher les différences entre les deux commits identifiés par commit_hash_1 et commit_hash_2. | Cette commande va afficher les différences entre les deux commits identifiés par commit_hash_1 et commit_hash_2. | ||
- | ==== "git branch" | + | === "git branch" |
Les branches sont faciles à utiliser et très utiles. | Les branches sont faciles à utiliser et très utiles. | ||
Ligne 110: | Ligne 110: | ||
* À un moment donné, on ne peut être assis que sur une seule branche. C' | * À un moment donné, on ne peut être assis que sur une seule branche. C' | ||
- | === Pourquoi utiliser les branches ? === | + | == Pourquoi utiliser les branches ? == |
Soit un code source quasi-stable à distribuer prochainement. On envisage aussi d'y inclure une caractéristique importante, mais on craint de casser ce qui est fait et de retarder le plan de mise en service. | Soit un code source quasi-stable à distribuer prochainement. On envisage aussi d'y inclure une caractéristique importante, mais on craint de casser ce qui est fait et de retarder le plan de mise en service. | ||
Ligne 122: | Ligne 122: | ||
Revenons aux commandes. Pour créer une branche, Lancer la commande suivante : | Revenons aux commandes. Pour créer une branche, Lancer la commande suivante : | ||
- | === Création d'une branche | + | == Création d'une branche == |
$ Git branch branch_name | $ Git branch branch_name | ||
Ligne 130: | Ligne 130: | ||
$ Git branch experimental_feature | $ Git branch experimental_feature | ||
- | === Branchement dans une branche ou "Je veux plus de branches" | + | == Branchement dans une branche ou "Je veux plus de branches" |
Dans une branche, on peut créer autant de branches que l'on veut, en créant éventuellement un arbre très dense. | Dans une branche, on peut créer autant de branches que l'on veut, en créant éventuellement un arbre très dense. | ||
Ligne 136: | Ligne 136: | ||
Il suffit de s'y placer (checkout de cette branche, voir ci-dessous commande 8) et d' | Il suffit de s'y placer (checkout de cette branche, voir ci-dessous commande 8) et d' | ||
- | ==== "git checkout" | + | === "git checkout" |
Une fois créée une branche, s'y déplacer avec la commande ci-dessous. | Une fois créée une branche, s'y déplacer avec la commande ci-dessous. | ||
Ligne 152: | Ligne 152: | ||
$ Git checkout master | $ Git checkout master | ||
- | === Liste de toutes les branches | + | == Liste de toutes les branches == |
La commande suivante affiche toutes les branches disponibles dans le référentiel actuel. | La commande suivante affiche toutes les branches disponibles dans le référentiel actuel. | ||
Ligne 158: | Ligne 158: | ||
$ Git branch | $ Git branch | ||
- | ==== "git merge" : Fusionner deux branches | + | === "git merge" : Fusionner deux branches === |
Se déplacer (checkout) vers la branche à laquelle on souhaite appliquer la fusion et exécuter la commande suivante. | Se déplacer (checkout) vers la branche à laquelle on souhaite appliquer la fusion et exécuter la commande suivante. | ||
Ligne 173: | Ligne 173: | ||
Git signale tous les conflits qu'il ne peut pas résoudre automatiquement (s'il en existe). On peut alors les résoudre manuellement. | Git signale tous les conflits qu'il ne peut pas résoudre automatiquement (s'il en existe). On peut alors les résoudre manuellement. | ||
- | === Suppression d'une branche | + | == Suppression d'une branche == |
La fusion faite, on peut supprimer la branche expérimentale si on le veut, avec la commande : | La fusion faite, on peut supprimer la branche expérimentale si on le veut, avec la commande : | ||
Ligne 181: | Ligne 181: | ||
Cette commande n' | Cette commande n' | ||
- | ==== "git rm" : Supprimer quelquechose dans le référentiel. | + | === "git rm" : Supprimer quelquechose dans le référentiel. === |
Lancer la commande suivante si on ne veut pas que git garde une trace d'un fichier ou un dossier (c' | Lancer la commande suivante si on ne veut pas que git garde une trace d'un fichier ou un dossier (c' | ||
Ligne 189: | Ligne 189: | ||
La commande git-rm ne supprime les fichiers du référentiel que pour le HEAD, Les révisions ou commits précédents garderont le fichier. | La commande git-rm ne supprime les fichiers du référentiel que pour le HEAD, Les révisions ou commits précédents garderont le fichier. | ||
- | ===== Pour finir ===== | + | ==== Pour finir ==== |
Encore des commandes utiles | Encore des commandes utiles | ||
- | ==== Une visionneuse graphique du référentiel | + | === Une visionneuse graphique du référentiel === |
Pour lancer une visionneuse graphique du référentiel, | Pour lancer une visionneuse graphique du référentiel, | ||
Ligne 199: | Ligne 199: | ||
$ gitk | $ gitk | ||
- | ==== Git - Interface utilisateur graphique | + | === Git - Interface utilisateur graphique === |
Pour ceux qui préfèrent une interface graphique, on peut installer une interface graphique pour git. Pour ubuntu : | Pour ceux qui préfèrent une interface graphique, on peut installer une interface graphique pour git. Pour ubuntu : | ||
Ligne 215: | Ligne 215: | ||
fonctionne de base, sans avoir besoin de l' | fonctionne de base, sans avoir besoin de l' | ||
- | ====== Partie II du tutoriel - 10 autres commandes | + | ===== Partie II du tutoriel - 10 autres commandes ===== |
- | ==== "git checkout" | + | === "git checkout" |
Le but d'un système de contrôle de version est de conserver l' | Le but d'un système de contrôle de version est de conserver l' | ||
Ligne 223: | Ligne 223: | ||
Git enregistre les révisions sous la forme de commits. Chaque commit est identifié pau un code de hachage unique. (Git utilise le hachage SHA1). On peut retrouver le numéro de hachage d'un commit en lançant la commande git-log (cf. la première partie). Le numéro de hachage est affiché dans le journal sous forme d'une chaîne hexadécimale sur la ligne qui commence par le mot " | Git enregistre les révisions sous la forme de commits. Chaque commit est identifié pau un code de hachage unique. (Git utilise le hachage SHA1). On peut retrouver le numéro de hachage d'un commit en lançant la commande git-log (cf. la première partie). Le numéro de hachage est affiché dans le journal sous forme d'une chaîne hexadécimale sur la ligne qui commence par le mot " | ||
- | === Déplacement vers un commit dans le passé | + | == Déplacement vers un commit dans le passé == |
Pour revenir à un commit particulier dans le temps, on utilise la commande git-checkout (introduite dans la partie I pour se déplacer entre les branches). La syntaxe est similaire, mais au lieu du nom branche, on utilise le numéro de hachage du commit. | Pour revenir à un commit particulier dans le temps, on utilise la commande git-checkout (introduite dans la partie I pour se déplacer entre les branches). La syntaxe est similaire, mais au lieu du nom branche, on utilise le numéro de hachage du commit. | ||
Ligne 260: | Ligne 260: | ||
L' | L' | ||
- | === Retour au présent | + | == Retour au présent == |
Pour revenir au HEAD de master, qui est l' | Pour revenir au HEAD de master, qui est l' | ||
Ligne 268: | Ligne 268: | ||
Comme déjà dit, ne pas oublier de valider les modifications par des commits ou des stashs. | Comme déjà dit, ne pas oublier de valider les modifications par des commits ou des stashs. | ||
- | ==== "git stash" : déplacement sans commit | + | === "git stash" : déplacement sans commit === |
C'est une commande très pratique. Elle permet de stocker les modifications en cours dans un cache temporaire. On peut ensuite les rappeler quand nécessaire. Cela réduit la nécessité de faire un commit à chaque fois que l'on veut se déplacer dans les branches ou les commits. | C'est une commande très pratique. Elle permet de stocker les modifications en cours dans un cache temporaire. On peut ensuite les rappeler quand nécessaire. Cela réduit la nécessité de faire un commit à chaque fois que l'on veut se déplacer dans les branches ou les commits. | ||
Ligne 282: | Ligne 282: | ||
$ git stash pop | $ git stash pop | ||
- | === Quand utiliser git-stash | + | == Quand utiliser git-stash == |
Voici un scénario typique. | Voici un scénario typique. | ||
Ligne 303: | Ligne 303: | ||
...Continuer à travailler normalement... | ...Continuer à travailler normalement... | ||
- | === Caches multiples | + | == Caches multiples == |
On peut ranger plus d'une série de changements, | On peut ranger plus d'une série de changements, | ||
Ligne 309: | Ligne 309: | ||
Quand on utilise la commande pop de git-stash, le dernier cache arrive en premier, un peu comme une pile. | Quand on utilise la commande pop de git-stash, le dernier cache arrive en premier, un peu comme une pile. | ||
- | === Voir les caches stockés | + | == Voir les caches stockés == |
Pour afficher une liste des changements mis en cache, exécuter la commande suivante | Pour afficher une liste des changements mis en cache, exécuter la commande suivante | ||
Ligne 317: | Ligne 317: | ||
On peut faire d' | On peut faire d' | ||
- | ==== "git diff" : quelques commutateurs pour mieux différencier. | + | === "git diff" : quelques commutateurs pour mieux différencier. === |
Cette commande a été présentée dans la première partie. Nous allons ici discuter de certaines options en ligne de commande, pour aider à trouver la bonne information. | Cette commande a été présentée dans la première partie. Nous allons ici discuter de certaines options en ligne de commande, pour aider à trouver la bonne information. | ||
- | === Trouver quels fichiers diffèrent (au lieu de ce qui diffère dans les fichiers) | + | == Trouver quels fichiers diffèrent (au lieu de ce qui diffère dans les fichiers) == |
Voici la commande : | Voici la commande : | ||
Ligne 331: | Ligne 331: | ||
$ git diff --name-status hash_1 hash_2 | $ git diff --name-status hash_1 hash_2 | ||
- | === Utilisation du symbole HEAD === | + | == Utilisation du symbole HEAD == |
On peut utiliser le symbole HEAD pour voir les diffs, entre le HEAD courant et les révisions antérieures, | On peut utiliser le symbole HEAD pour voir les diffs, entre le HEAD courant et les révisions antérieures, | ||
Ligne 342: | Ligne 342: | ||
commit_hash_just_before_HEAD | commit_hash_just_before_HEAD | ||
- | === Qu' | + | == Qu' |
Comme discuté dans la première partie de ce tutoriel, HEAD se réfère au dernier commit sur la branche courante. | Comme discuté dans la première partie de ce tutoriel, HEAD se réfère au dernier commit sur la branche courante. | ||
Ligne 348: | Ligne 348: | ||
On peut modifier le nombre après le tilde (~) pour trouver les différences entre le HEAD et ce nombre de commits avant le HEAD courant. Expérimenter et voir le résultat. Il n'y a aucun risque à essayer | On peut modifier le nombre après le tilde (~) pour trouver les différences entre le HEAD et ce nombre de commits avant le HEAD courant. Expérimenter et voir le résultat. Il n'y a aucun risque à essayer | ||
- | ==== "git add" revisité. | + | === "git add" revisité. === |
Dans la première partie de ce tutoriel, nous avons appris à faire que git suive un ou plusieurs fichiers en utilisant la commande << git add >>. Mais nous allons voir d' | Dans la première partie de ce tutoriel, nous avons appris à faire que git suive un ou plusieurs fichiers en utilisant la commande << git add >>. Mais nous allons voir d' | ||
Ligne 373: | Ligne 373: | ||
On va voir pourquoi utiliser git-add de cette façon.</ | On va voir pourquoi utiliser git-add de cette façon.</ | ||
- | === Ne committer que certains fichiers sélectionnés | + | == Ne committer que certains fichiers sélectionnés == |
Supposons que l'on travaille sur trois fichiers source. Deux fichiers sont corrects mais il reste du travail sur le troisième fichier. On peut committer seulement ces deux fichiers en lançant les commandes suivantes : | Supposons que l'on travaille sur trois fichiers source. Deux fichiers sont corrects mais il reste du travail sur le troisième fichier. On peut committer seulement ces deux fichiers en lançant les commandes suivantes : | ||
Ligne 402: | Ligne 402: | ||
Tester aussi la commande git-reset (plus loin). | Tester aussi la commande git-reset (plus loin). | ||
- | ==== git-rm : un peu plus à savoir | + | === git-rm : un peu plus à savoir === |
- | === Le commutateur –cached | + | == Le commutateur –cached == |
Lorsque git-rm est utilisé avec ce commutateur, | Lorsque git-rm est utilisé avec ce commutateur, | ||
Ligne 414: | Ligne 414: | ||
La commande ci-dessus va supprimer le fichier ou le dossier, mais ils resteront sur le disque. Si on fait la commande git-status, Le fichier sera affiché comme supprimé, ainsi que un-tracked (non suivi). | La commande ci-dessus va supprimer le fichier ou le dossier, mais ils resteront sur le disque. Si on fait la commande git-status, Le fichier sera affiché comme supprimé, ainsi que un-tracked (non suivi). | ||
- | === git-rm sans le commutateur –cached | + | == git-rm sans le commutateur –cached == |
Utilisé sans le commutateur --cache, git-rm supprime le fichier du référentiel ainsi que sur le disque. | Utilisé sans le commutateur --cache, git-rm supprime le fichier du référentiel ainsi que sur le disque. | ||
Ligne 420: | Ligne 420: | ||
Il faut committer les changements après un git-rm, avec ou sans le commutateur --cached. | Il faut committer les changements après un git-rm, avec ou sans le commutateur --cached. | ||
- | === Tout n'est pas perdu ! === | + | == Tout n'est pas perdu ! == |
Se rappeler que la suppression avec git-rm, validée, du ou des fichiers ne s' | Se rappeler que la suppression avec git-rm, validée, du ou des fichiers ne s' | ||
Ligne 426: | Ligne 426: | ||
On ne peut pas modifier l' | On ne peut pas modifier l' | ||
- | ==== Gestion des branches | + | === Gestion des branches === |
Nous savons déjà comment créer, supprimer et nous déplacer entre les branches. Voici quelques commandes de plus pour vous gérer les dépôts. | Nous savons déjà comment créer, supprimer et nous déplacer entre les branches. Voici quelques commandes de plus pour vous gérer les dépôts. | ||
- | === Création d'une branche de certains anciens commits | + | == Création d'une branche de certains anciens commits == |
Supposons que l'on veuille revenir à un commit particulier et créer une branche à partir de lui. On peut émettre les commandes suivantes : | Supposons que l'on veuille revenir à un commit particulier et créer une branche à partir de lui. On peut émettre les commandes suivantes : | ||
Ligne 452: | Ligne 452: | ||
On peut utiliser l' | On peut utiliser l' | ||
- | ==== git reset ==== | + | === git reset === |
- | === Effacer les changements | + | == Effacer les changements == |
Pour annuler des changements du code source dont on n'a pas besoin, la commande suivante efface toutes les modifications et revient au dernier état propre, à savoir le dernier commit (la dernière validation). | Pour annuler des changements du code source dont on n'a pas besoin, la commande suivante efface toutes les modifications et revient au dernier état propre, à savoir le dernier commit (la dernière validation). | ||
Ligne 466: | Ligne 466: | ||
Cette commande peut être utile pour fusionner des branches des dépôts d' | Cette commande peut être utile pour fusionner des branches des dépôts d' | ||
- | === Effacer les fichiers marqués pour un commit | + | == Effacer les fichiers marqués pour un commit == |
Pour ne plus faire de commit sur des fichiers que l'on a marqués, on peut lancer la commande suivante pour retirer leur marquage | Pour ne plus faire de commit sur des fichiers que l'on a marqués, on peut lancer la commande suivante pour retirer leur marquage | ||
Ligne 474: | Ligne 474: | ||
Cette commande ne supprime le marquage que pour les commits, les changements restent. | Cette commande ne supprime le marquage que pour les commits, les changements restent. | ||
- | === Effacer les commits | + | == Effacer les commits == |
Cette commande sert dans les rares cas où il faut vraiment modifier l' | Cette commande sert dans les rares cas où il faut vraiment modifier l' | ||
Ligne 486: | Ligne 486: | ||
Dans un travail collaboratif, | Dans un travail collaboratif, | ||
- | ==== Garbage collection : Compresser les dépôts et libérer de l' | + | === Garbage collection : Compresser les dépôts et libérer de l' |
La commande suivante compresse et nettoye le dépôt git : | La commande suivante compresse et nettoye le dépôt git : | ||
Ligne 494: | Ligne 494: | ||
Cette opération peut prendre du temps0 Une fois terminé, on a gagné de l' | Cette opération peut prendre du temps0 Une fois terminé, on a gagné de l' | ||
- | ==== Extra 1 : .gitignore, Ignorer certains fichiers | + | === Extra 1 : .gitignore, Ignorer certains fichiers === |
Tous les fichiers du dossier de projet ne doivent pas être suivis par git. Par exemple : les fichiers objets, les fichiers d' | Tous les fichiers du dossier de projet ne doivent pas être suivis par git. Par exemple : les fichiers objets, les fichiers d' | ||
Ligne 500: | Ligne 500: | ||
Créer un fichier nommé ‘.gitignore‘ dans le dossier de base du dépôt git et y inscrire le nom des fichiers comme expliqué ci-dessous, pour que git les ignore. | Créer un fichier nommé ‘.gitignore‘ dans le dossier de base du dépôt git et y inscrire le nom des fichiers comme expliqué ci-dessous, pour que git les ignore. | ||
- | === Les jokers simples sont reconnus | + | == Les jokers simples sont reconnus == |
Les jokers ‘*‘ and ‘?‘ et les expressions régulières entre crochets `[ ]‘ sont reconnues. | Les jokers ‘*‘ and ‘?‘ et les expressions régulières entre crochets `[ ]‘ sont reconnues. | ||
Ligne 581: | Ligne 581: | ||
</ | </ | ||
- | === A quoi sert .gitignore ? === | + | == A quoi sert .gitignore ? == |
Regardons un scénario typique de codage. | Regardons un scénario typique de codage. | ||
Ligne 595: | Ligne 595: | ||
La solution : créer un fichier .gitignore dans le répertoire de base du projet avec une ligne contenant <<*. bak>> | La solution : créer un fichier .gitignore dans le répertoire de base du projet avec une ligne contenant <<*. bak>> | ||
- | ==== Extra 2 : Ajouter quelques couleurs et se présenter à git ==== | + | === Extra 2 : Ajouter quelques couleurs et se présenter à git === |
- | === Votre nom et votre adresse email dans les commits | + | == Votre nom et votre adresse email dans les commits == |
Editer le fichier .git/config dans le dossier de base (le dossier du projet) et entrer les lignes suivantes. | Editer le fichier .git/config dans le dossier de base (le dossier du projet) et entrer les lignes suivantes. | ||
Ligne 617: | Ligne 617: | ||
Une fois placés ces détails dans le dossier, au prochain commit, le nom et l' | Une fois placés ces détails dans le dossier, au prochain commit, le nom et l' | ||
- | === Coloriser la sortie de git === | + | == Coloriser la sortie de git == |
Un petit post de Gary explique comment faire : [[http:// | Un petit post de Gary explique comment faire : [[http:// |