User Tools

Site Tools


git:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
git:start [2021/11/21 07:43] – [Developpement] felixgit:start [2022/10/20 17:18] (current) – external edit 127.0.0.1
Line 3: Line 3:
 Git est un outil de dépôt de logiciel. Il s'adresse aux kaznautes avertis. Git est un outil de dépôt de logiciel. Il s'adresse aux kaznautes avertis.
  
-~~MULTI_PLUGIN_OPEN~~+
  
 ??? Comment déposer mes sources sur votre git ? ??? Comment déposer mes sources sur votre git ?
 !!! !!!
 Nous réservons cette fonction aux kaznautes (toujours dans le souci de localiser les données au plus proche des utilisateurs). Nous réservons cette fonction aux kaznautes (toujours dans le souci de localiser les données au plus proche des utilisateurs).
-Si vous souhaitez avoir un compte sur notre git, envoyez nous un courriel à [[contact@kaz.bzh|]]+Si vous souhaitez avoir un compte sur notre git, envoyez-nous un courriel à [[contact@kaz.bzh|]]
 ??? ???
-~~MULTI_PLUGIN_CLOSE~~+
  
 ====== Quelques commandes utiles ====== ====== Quelques commandes utiles ======
  
-Voici quelques commandes utiles. La liste n'est pas exhaustives. En particulier, il n'est pas expliqué comment détruire des branches ou des rétractation d'évolution des sources sur le serveurs+Voici quelques commandes utiles. La liste n'est pas exhaustive. En particulier, il n'est pas expliqué comment détruire des branches ou des rétractations d'évolution des sources sur le serveur
-Ceci est très dangereux car, si un autre développeurs a entre-temps fait des mise à jour les changement incrémentaux n'auront plus aucun sens (c'est un peu comme modifier le continuum espace-temps et entraîner la destruction de l'univers. Dans le meilleur des cas, cela pourrait se limiter à votre espace git).+Ceci est très dangereux car, si un autre développeur a entre-temps fait des mises à jour les changements incrémentaux n'auront plus aucun sens (c'est un peu comme modifier le continuum espace-temps et entraîner la destruction de l'univers. Dans le meilleur des cas, cela pourrait se limiter à votre espace git). 
 + 
 +===== Principe ===== 
 + 
 +GIT est un moyen pour les développeurs de gérer des versions de leurs sources. 
 +On distingue : 
 +  * une base de données sur un ou des serveurs (remote) 
 +  * une base de données locale chez chaque développeur (local) 
 +{{ :git:git-schema.png?direct&400 |}} 
 + 
 +Voici 4 familles de commande GIT suivant le sens de déplacement des données : 
 +  * (1) copie une branche de la BD locale vers le répertoire courant 
 +<code>git checkout ...</code>  
 +  * (2) copie du répertoire courant vers une branche de ta BD locale. 
 +<code>git commit -a</code>  
 +  * (3) copie du serveur vers le répertoire courant 
 +<code>git pull ...</code>  
 +  * (4) copie du répertoire courant vers le serveur 
 +<code>git push ...</code> 
  
 ===== Initialisation ===== ===== Initialisation =====
Line 43: Line 61:
 export EDITOR=emacs export EDITOR=emacs
 </code> </code>
 +Il faut faire la modification dans son <wrap safety>~/.bashrc</wrap>
 </WRAP> </WRAP>
  
Line 60: Line 79:
 </code> </code>
  
-===== Developpement =====+===== Développement =====
  
 Pour la création d'une sous-branche Pour la création d'une sous-branche
Line 70: Line 89:
  
 On obtient la structure suivante On obtient la structure suivante
 +
 <code> <code>
 master master
Line 76: Line 96:
 </code> </code>
  
-On peut créer des répertoires et des fichiers il ne seront pas affecté par les changement de branche tant qu'ils ne sont pas inclus dans la liste des fichiers de référence.+On peut créer des répertoires et des fichiers, ils ne seront pas affectés par les changements de branche tant qu'ils ne sont pas inclus dans la liste des fichiers de référence.
  
 On peut ajouter des fichiers avec la commande suivante (la tabulation complète avec les fichiers pas encore dans le git) : On peut ajouter des fichiers avec la commande suivante (la tabulation complète avec les fichiers pas encore dans le git) :
 +
 <code bash> <code bash>
 git add mon-fichier git add mon-fichier
 </code> </code>
  
-A tout moment, on peut synchroniser les fichiers avec la référence local qui se trouve dans <wrap>.git</wrap> (synchronisation répertoire - base locale) avec la commande :+A tout moment, on peut synchroniser les fichiers avec la référence locale qui se trouve dans <wrap safety>.git</wrap> (synchronisation répertoire - base locale) avec la commande : 
 <code bash> <code bash>
 git commit -a git commit -a
Line 91: Line 113:
  
 Une fois que le code est satisfaisant, on peut pousser la branche sur le git (synchronisation base locale - base du serveur) avec la commande : Une fois que le code est satisfaisant, on peut pousser la branche sur le git (synchronisation base locale - base du serveur) avec la commande :
 +
 <code bash> <code bash>
 git push origin develop git push origin develop
Line 96: Line 119:
  
 Avant de modifier une branche pensez à synchroniser votre branche avec la dernière version du serveur : Avant de modifier une branche pensez à synchroniser votre branche avec la dernière version du serveur :
 +
 <code bash> <code bash>
 git fetch -a git fetch -a
Line 101: Line 125:
 </code> </code>
  
-<WRAP center round tip 60%> +<WRAP center round tip 60%> Pour ne pas à avoir à indique quel branche vous voulez charger, vous pouvez indiquer que votre branche locale suit les mis-à-jour d'une branche distante : 
-Pour ne pas à avoir à indique quel branche vous voulez charger, vous pouvez indiquer que votre branche locale suit les mis-à-jour d'une branche distante :+
 <code bash> <code bash>
 git branch --set-upstream-to=origin/develop develop git branch --set-upstream-to=origin/develop develop
 +git config push.default current
 </code> </code>
 +
 </WRAP> </WRAP>
  
-<WRAP center round tip 60%> +<WRAP center round tip 60%> De même si vous acceptez en cas de conflit que git fasse le mélange les modifications des autres avec votre version actuelle, vous pouvez indiquer ce paramètre par défaut : 
-De même si vous acceptez en cas de conflit que git fasse le mélange les modifications des autres avec votre version actuelle, vous pouvez indiquer ce paramètre par défaut :+
 <code bash> <code bash>
 git config pull.rebase false git config pull.rebase false
 </code> </code>
-Dans ce cas, il pourra identifier des conflits qui seront signaler dans les sources (ça les rend invalides tant qu'un humain n'a pas fait es corrections nécessaires). 
-</WRAP> 
  
-pour intégrer les modification d'une autre branche faire :+Dans ce cas, il pourra identifier des conflits qui seront signalés dans les sources (ça les rend invalides tant qu'un humain n'a pas fait des corrections nécessaires). </WRAP> 
 + 
 +pour intégrer les modifications d'une autre branche faire : 
 <code bash> <code bash>
 git merge une-branche-avec-de-nouvelles-fonctions git merge une-branche-avec-de-nouvelles-fonctions
 </code> </code>
  
-Pour réinitialisé vos fichiers à la dernière synchronisation (commit), c'est à dire perdre votre travail en cours :+Pour réinitialiser vos fichiers à la dernière synchronisation locale (commit), c'est à dire perdre votre travail en cours : 
 <code bash> <code bash>
 git reset --hard HEAD git reset --hard HEAD
 </code> </code>
 +
 +
 +Si vous êtes plusieurs développeurs, git fait des fusions automatiques et va prendre de chaque contribution les modifications ajout ou suppression de ligne. En revanche, si 2 développeurs vont chacun dans leur branche faire une modification différente (comme renommer une variable i en j dans les 2 cas mais ne pas mettre le même nombre d'espaces avant). Dans ce cas, seul un être humain peut résoudre ce problème.
 +
 +Mais git vous le signale avec le motif suivant :
 +<code>
 +<<<<<<< votre branche
 +votre code
 +=======
 +Autre code
 +>>>>>>> autre branche
 +</code>
 +
 +Prenons l'exemple du fichier <wrap safety>test.c</wrap> qui contient :
 +<code c++>
 +int i; // une variable
 +</code>
 +
 +Vous avez modifié votre branche <wrap safety>develop-perso</wrap> avec :
 +<code c++>
 +int j; // compteur de brouzouf (avant c'était i)
 +</code>
 +
 +Sur le site une modification a été enregistrée  :
 +<code c++>
 +int j; // compteur de brouzouf (modif dans develop)
 +</code>
 +
 +Au moment de <wrap safety>git pull</wrap> ou de <wrap safety>git merge develop</wrap>, il y a le message :
 +<code>
 +Fusion automatique de test.c
 +CONFLIT (contenu) : Conflit de fusion dans test.c
 +La fusion automatique a échoué ; réglez les conflits et validez le résultat.
 +</code>
 +L'édition du fichier donne :
 +{{ :git:conflit-fussion.png?direct&600 |}}
 +
 +Voici quelques commandes utiles :
 +<code>
 +key             binding
 +---             -------
 +C-c ^ n  smerge-next
 +C-c ^ p smerge-prev
 +C-c ^ u smerge-keep-upper
 +C-c ^ l smerge-keep-lower
 +C-c ^ a smerge-keep-all
 +C-c ^ RET smerge-keep-current
 +C-c ^ C smerge-combine-with-next
 +</code>
 +
 +<WRAP center round tip 60%>
 +Pour rechercher les conflits faire
 +<code bash>
 +git diff --name-only --diff-filter=U
 +</code>
 +ou
 +<code bash>
 +find . -type f -exec grep -q "<<<<<<<" {} \;  -exec grep -q ">>>>>>>" {} \; -print
 +</code>
 +</WRAP>
 +
  
 ===== Fusion ===== ===== Fusion =====
Line 135: Line 224:
 {{ :git:demande-fusion.png?direct&400 |}} {{ :git:demande-fusion.png?direct&400 |}}
  
-Ensuite vous remplissez le formulaire en indiquant à gauche la branche de destination et à droite la branche qui contient modifications récentes (le sens n'est pas naturelle).+Ensuite vous remplissez le formulaire en indiquant à gauche la branche de destination et à droite la branche qui contient modifications récentes (le sens n'est pas naturel).
 {{ :git:confirme-fusion.png?direct&600 |}} {{ :git:confirme-fusion.png?direct&600 |}}
  
 L'administrateur va lui ensuite valider sans rien faire s'il est d'accord ou bien charger cette branche, la modifier et utiliser la commande "merge". L'administrateur va lui ensuite valider sans rien faire s'il est d'accord ou bien charger cette branche, la modifier et utiliser la commande "merge".
 {{ :git:valide-fusion.png?direct&600 |}} {{ :git:valide-fusion.png?direct&600 |}}
 +
git/start.1637480619.txt.gz · Last modified: 2021/11/21 07:43 by felix