Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
technique:git:git_avancees [2020/04/26 02:50] – francoisa | technique:git:git_avancees [2021/09/20 21:37] – francoisa | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Git : fonctionnalités avancées ====== | ====== Git : fonctionnalités avancées ====== | ||
- | Pour pouvoir utiliser pleinement Git, il peut être utile de s' | + | Pour pouvoir utiliser pleinement Git, il peut être utile de s' |
===== 1. Création de branches ===== | ===== 1. Création de branches ===== | ||
Ligne 150: | Ligne 150: | ||
</ | </ | ||
- | Attention, il faudra | + | Attention, il faudra |
< | < | ||
Ligne 158: | Ligne 158: | ||
</ | </ | ||
+ | |||
===== Gestion d'un dépot avec authentification par clef SSH ===== | ===== Gestion d'un dépot avec authentification par clef SSH ===== | ||
- | 1) Ajouter sa clef SSH publique dans son profil du dépot distant (github, framagit...) | + | 1) Ajouter sa clef SSH publique dans son profil du dépot distant (github, framagit…) |
2) Définir par défaut l' | 2) Définir par défaut l' | ||
Ligne 177: | Ligne 178: | ||
Et c'est tout. Au prochain '' | Et c'est tout. Au prochain '' | ||
+ | ===== Gestion d'un fork d'un projet distant ===== | ||
+ | |||
+ | Cas fréquent : on veut contribuer à un projet existant : | ||
+ | |||
+ | - On forke le projet existant depuis la plateforme | ||
+ | - On clone ce projet localement sur son PC (git clone) | ||
+ | - On crée une nouvelle branche locale de développement (git branch nouvbranche && git checkout nouvbranche) | ||
+ | - on ajoute cette branche distante | ||
+ | - On modifie le code, on commite (git commit -m " | ||
+ | - On retourne sur la plateforme et on crée une PR Pull Request | ||
+ | |||
+ | **Problème** | ||
+ | |||
+ | Il faut définir un dépot upstream du dépot existant : | ||
+ | |||
+ | < | ||
+ | git remote add upstream git@github.com: | ||
+ | git fetch upstream # on se calle sur upstream et on affiche les branches disponibles | ||
+ | git checkout master # pour se mettre localement sur la branche master | ||
+ | git reset --hard upstream/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | On n' | ||
+ | |||
+ | < | ||
+ | git checkout -b nouvellebranche | ||
+ | |||
+ | </ | ||
+ | |||
+ | La fois suivante, pour remettre à jour : | ||
+ | |||
+ | < | ||
+ | git checkout master # pour se mettre localement sur la branche master | ||
+ | git reset --hard upstream/ | ||
+ | git fetch upstream | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Pour récupérer des commits d' | ||
+ | |||
+ | Se placer dans la branche qui contient les anciens commits : | ||
+ | |||
+ | < | ||
+ | git checkout anciennebranche | ||
+ | git log # pour afficher les commits du plus récent au plus ancien idcommit3, idcommit2, idcommit1 | ||
+ | git checkout master # pour repasser dans la branche master | ||
+ | git checkout -b nouvellebranche # pour créer et se placer dans la nouvelle branche | ||
+ | git cherry-pick idcommit1 idcommit2 idcommit3 | ||
+ | git log # pour afficher les commits récupérés | ||
+ | git branch --track master origin/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Stocker ses accès (sur un serveur sécurisé) ===== | ||
+ | |||
+ | Editer le '' | ||
+ | |||
+ | < | ||
+ | [remote " | ||
+ | url = https:// | ||
+ | |||
+ | </ | ||
+ | |||
+ | Ceci peut être définié au moment du clone : | ||
+ | |||
+ | < | ||
+ | git clone https://< | ||
+ | |||
+ | </ | ||
+ | |||
+ | On peut aussi stocker ces infos dans les credentials ('' | ||
+ | |||
+ | < | ||
+ | git config credential.helper store # pour les activer globalement ou | ||
+ | git config --global credential.helper store # pour les activer localement dans chaque dépot | ||
+ | |||
+ | </ | ||
+ | |||
+ | Et au pull ou push suivant, les infos de connexions sont mémorisées ! | ||
+ | |||
+ | ===== Déboguer du code bugué depuis un commit inconnu ===== | ||
+ | |||
+ | git bisect permet de faire ça : Trouver par recherche binaire la modification qui a introduit un bogue. (cf [[https:// | ||
+ | |||
+ | Technique par dichotomie entre 2 commits : l'un avec le bug (bad), l' | ||
+ | |||
+ | Exemple : | ||
+ | < | ||
+ | |||
+ | git bisect start # démarrage de git bisect | ||
+ | git bisect bad # La version actuelle est mauvaise | ||
+ | git bisect good v2.6.13-rc2 # la version v2.6.13-rc2 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Et se laisser guider. | ||
+ | |||
+ | < | ||
+ | git bisect reset # pour revenir au HEAD d' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Marche aussi avec un script de test qui doit renvoyer 0 pour être valide : | ||
+ | |||
+ | < | ||
+ | git bisect run mon_script arguments | ||
+ | |||
+ | </ | ||