technique:git:git_avancees

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:git:git_avancees [2020/04/26 02:50] francoisatechnique: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'approprier la notion de branches. Une branche est une fonctionnalité ou une option que l'on souhaite ajouter et tester sans quelle vienne pour l'instant impacter le coeur du projet.+Pour pouvoir utiliser pleinement Git, il peut être utile de s'approprier la notion de branches. Une branche est une fonctionnalité ou une option que l'on souhaite ajouter et tester sans qu'elle vienne pour l'instant impacter le coeur du projet.
  
 ===== 1. Création de branches ===== ===== 1. Création de branches =====
Ligne 150: Ligne 150:
 </code> </code>
  
-Attention, il faudra metre à jour les 2 dépots de manière manuelle. Par exemple :+Attention, il faudra mettre à jour les 2 dépots de manière manuelle. Par exemple :
  
 <code> <code>
Ligne 158: Ligne 158:
  
 </code> </code>
 +
 ===== 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'utilisation de sa clef pour ce type de dépot dans ''~/.ssh/config'' : 2) Définir par défaut l'utilisation de sa clef pour ce type de dépot dans ''~/.ssh/config'' :
Ligne 177: Ligne 178:
  
 Et c'est tout. Au prochain ''git push'', la passphrase de la clef sera demandée (sauf si elle est mémorisée dans le ssh-agent). Et c'est tout. Au prochain ''git push'', la passphrase de la clef sera demandée (sauf si elle est mémorisée dans le ssh-agent).
 +===== 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 "blabla") et on push à distance (git push)
 +  - On retourne sur la plateforme et on crée une PR Pull Request
 +
 +**Problème**  : que faire si le projet a évolué après, puisque localement on a un clone du fork, mais pas du projet original ?
 +
 +Il faut définir un dépot upstream du dépot existant :
 +
 +<code>
 +git remote add upstream git@github.com:nomdepot/nomprojet.git
 +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/master # pour faire un reset local de la branche master
 +
 +</code>
 +
 +On n'oublie pas de recréer une nouvelle branche pour faire une nouvelle PR :
 +
 +<code>
 +git checkout -b nouvellebranche
 +
 +</code>
 +
 +La fois suivante, pour remettre à jour :
 +
 +<code>
 +git checkout master # pour se mettre localement sur la branche master
 +git reset --hard upstream/master # pour faire un reset local de la branche master
 +git fetch upstream
 +
 +</code>
 +
 +===== Pour récupérer des commits d'autres branches dans une branche en cours =====
 +
 +Se placer dans la branche qui contient les anciens commits :
 +
 +<code>
 +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/master # pour se reconnecter à une branche existante (passer de dev à master)
 +
 +</code>
 +
 +===== Stocker ses accès (sur un serveur sécurisé) =====
 +
 +Editer le ''.git/config''  et ajouter son username (avec %40 au lieu de @) et password dans l'URL :
 +
 +<code>
 +[remote "origin"]
 +url = https://USERNAME:PASSWORD@code.cemea.org/francois.audirac/raspitv.git
 +
 +</code>
 +
 +Ceci peut être définié au moment du clone :
 +
 +<code>
 +git clone https://<USERNAME>:<PASSWORD>@github.com/path/to/repo.git
 +
 +</code>
 +
 +On peut aussi stocker ces infos dans les credentials (''.git-credentials'')
 +
 +<code>
 +git config credential.helper store # pour les activer globalement ou
 +git config --global credential.helper store # pour les activer localement dans chaque dépot
 +
 +</code>
 +
 +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://git-scm.com/docs/git-bisect/fr|doc git-bisect]])
 +
 +Technique par dichotomie entre 2 commits : l'un avec le bug (bad), l'autre sans le bug (good).
 +
 +Exemple :
 +<code>
 +
 +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
 +
 +</code>
 +
 +Et se laisser guider.
 +
 +<code>
 +git bisect reset # pour revenir au HEAD d'origine.
 +
 +</code>
 +
 +Marche aussi avec un script de test qui doit renvoyer 0 pour être valide :
 +
 +<code>
 +git bisect run mon_script arguments
 +
 +</code>
  
  
  • technique/git/git_avancees.txt
  • Dernière modification : 2024/04/02 15:08
  • de 127.0.0.1