|
|
|
[Git](https://git-scm.com/) est un outil de gestion de versions, il permet de travailler à plusieurs sur du code en gardant un historique cohérent.
|
|
|
|
|
|
|
|
## Plan
|
|
|
|
|
|
|
|
[[_TOC_]]
|
|
|
|
|
|
|
|
## Configurer git bash et spyder
|
|
|
|
|
|
|
|
Opérations à faire une fois sur chaque poste :
|
|
|
|
|
|
|
|
1. Ouvrir notepad, copier coller les lignes ci-dessous **en changeant le nom et l'email** et sauver dans un fichier `C:\User\<user>\.gitconfig` (remplacer `<user>` par votre nom d'utilisateur)
|
|
|
|
```
|
|
|
|
[user]
|
|
|
|
name = Jane Doe
|
|
|
|
email = Jane.Doe@example.com
|
|
|
|
[merge]
|
|
|
|
tool = winmerge
|
|
|
|
[mergetool "winmerge"]
|
|
|
|
cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e -u -wl -dl "Local" -dm "$MERGED" -wr -dr "Distant" "$LOCAL" "$MERGED" "$REMOTE"
|
|
|
|
[mergetool]
|
|
|
|
prompt = false
|
|
|
|
[diff]
|
|
|
|
tool = winmergediff
|
|
|
|
[difftool "winmergediff"]
|
|
|
|
cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e -u -wr -dr "Reference" "$MERGED" "$LOCAL"
|
|
|
|
[difftool]
|
|
|
|
prompt = false
|
|
|
|
[guitool "Mergetool"]
|
|
|
|
cmd = git mergetool
|
|
|
|
[guitool "Difftool"]
|
|
|
|
cmd = git difftool
|
|
|
|
keepBackup = false
|
|
|
|
keepTemporaries = false
|
|
|
|
[guitool "Pull"]
|
|
|
|
cmd = git pull $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD) | tr / \" \")
|
|
|
|
[gui]
|
|
|
|
recentrepo = C:/Users/User/SAGE git/david
|
|
|
|
|
|
|
|
```
|
|
|
|
2. Télécharger et installer [winmerge](https://sourceforge.net/projects/winmerge/files/stable/2.16.8/WinMerge-2.16.8-Setup.exe)
|
|
|
|
3. Générer une clef ssh permettant de vous authentifier sans mot de passe :
|
|
|
|
1. Lancer git-gui (click droit dans un dossier et "git gui here")
|
|
|
|

|
|
|
|
2. Menu > Help > Show SSH Key
|
|
|
|

|
|
|
|
3. Generate Key
|
|
|
|

|
|
|
|
4. Au prompt faire OK sans entrer de mot de passe (2 fois)
|
|
|
|
5. Selectionner le text et cliquer sur "Copy to clipboard"
|
|
|
|

|
|
|
|
6. Aller sur Gitlab dans ses réglages
|
|
|
|

|
|
|
|
7. Aller sur les clef ssh et coller le texte et cliquer sur add key
|
|
|
|

|
|
|
|
4. Dans le(s) environnement(s) de Spyper faire `conda install git`
|
|
|
|
## Utiliser git avec spyder
|
|
|
|
|
|
|
|
|
|
|
|
### Cloner un dépot
|
|
|
|
|
|
|
|
Impossible depuis spyder **(à vérifier)**.
|
|
|
|
|
|
|
|
1. Aller dans le dossier avec l'explorateur windows, faire click droit et "git gui here":100:
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
2. Choisir clone Existing repository
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
3. Indiquer l'url de clone et le projet de référence et cliquer Clone
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
4. Entrer le mot de passe de la clé ssh puis ok et encore 'yes' et Ok au prompt suivant
|
|
|
|
|
|
|
|
### Ouvrir le projet git depuis Spyder
|
|
|
|
|
|
|
|
1. Aller dans Projects > New Project
|
|
|
|

|
|
|
|
2. Choisir "Existing directory" et selectionner le projet cloné précédement
|
|
|
|

|
|
|
|
3. Dans le menu de gauche vous devez voir voir votre projet.
|
|
|
|
|
|
|
|
### Workflow
|
|
|
|
|
|
|
|
Pour utiliser git depuis spyder vous avez 2 possibilité, nous recommandons d'utiliser l'interface graphique , pour ce faire, faire un click droit sur le projet et :
|
|
|
|
+ Commit pour ouvrir [Git gui](#git-gui) l'interface graphique principale
|
|
|
|
+ Browse repository pour ouvrir (Gitk)[#gitk] l'interface graphique de visualisation de l'état du dépôt
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
Vous pouvez aussi lancer des commandes git depuis la commande ipython en tapant `!git macomamnde`
|
|
|
|
|
|
|
|
### Git gui
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
1. Récupérer les changement (pull)
|
|
|
|

|
|
|
|
2. Sauver ses modifications (commit + push)
|
|
|
|
1. Marquer les changements pour le commit
|
|
|
|

|
|
|
|
2. Ecrire un message explicatif et cliquer commit
|
|
|
|

|
|
|
|
3. Envoyer les données sur le serveur (push)
|
|
|
|

|
|
|
|
4. Si le push à réussit vous devez voir un success, sinon c'est probablement que vous devez faire un pull (voir 1.)
|
|
|
|

|
|
|
|
3. Visualiser l'historique : depuis le menu Repository > visualize Master history ou visualiza all branches history, il est possible d'ouvrir l'interface de visualisation de l'historique ([gitk](#gitk))
|
|
|
|
|
|
|
|
### Fusion à 3 fichiers
|
|
|
|
|
|
|
|
Si une collègue à effectuée des changements avant vous, le ppush sera refusé par gitlab indiquant `non fast-forward`. Il faut alors faire un `Pull` qui pourra résulter à deux situations :
|
|
|
|
|
|
|
|
1. Si vous avez modifié des fichiers différents ou des parties différentes d'un même fichier, alors git fera une fusion `fast-forward` c'est à dire qu'il prendra les deux série de changements
|
|
|
|
2. Sinon git pull indiquera une erreur :
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
il faudra que vous fassiez une fusion à 3 fichiers, c'est à dire une fusion entre :
|
|
|
|
+ Votre version
|
|
|
|
+ Celle de votre collègue
|
|
|
|
+ La version partiellement fusionnée par git
|
|
|
|
|
|
|
|
Pour ce faire, lancer git-gui et aller dans Tool > Merge
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
cela lancera winmerge :
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
Faites vos modifications dans le panneau du milieu et enregistrez puis faite un commit et un push normalement
|
|
|
|
|
|
|
|
Enfin supprimez les fichiers temporaires de fusion :
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
### gitk
|
|
|
|
|
|
|
|
Gitk permet de facilement voir "où on en est" par rapport au serveur gitlab, exemple:
|
|
|
|
|
|
|
|

|
|
|
|

|
|
|
|
|
|
|
|
## Avancé
|
|
|
|
|
|
|
|
### Resources supplémentaires
|
|
|
|
|
|
|
|
+ [une feuille aide mémoire produite par gitlab](https://about.gitlab.com/images/press/git-cheat-sheet.pdf)
|
|
|
|
+ [Tutoriel gitlab it's all connected](https://about.gitlab.com/blog/2016/03/08/gitlab-tutorial-its-all-connected/)
|
|
|
|
|
|
|
|
|
|
|
|
### Git en ligne de commande
|
|
|
|
|
|
|
|
1. Récupérer les modifications des collègues `git pull`
|
|
|
|
2. Éditer des fichiers
|
|
|
|
3. Ajouter des nouveaux fichiers (dire à git de les gérer) `git add <fichiers>`
|
|
|
|
4. Enregistrer les modifications `git commit <fichiers>` ou `git commit -a` pour enregistrer toutes les modifications
|
|
|
|
5. Envoyer les modifications sur le serveur `git push`
|
|
|
|
|
|
|
|
### Récupérer un fichier
|
|
|
|
|
|
|
|
Pour revenir à la dernière version d'un fichier:
|
|
|
|
|
|
|
|
`git checkout <monfichier>`
|
|
|
|
|
|
|
|
### Les branches
|
|
|
|
|
|
|
|
Les branches permettent d'avoir deux version du code différentes qui coexistent, elles sont très utiles pour :
|
|
|
|
|
|
|
|
+ Garder des version stables indépendamment du développement
|
|
|
|
+ Permettre à quelqu'un de faire un travail de fond sur le code sans déranger les autres
|
|
|
|
|
|
|
|
#### En graphique
|
|
|
|
|
|
|
|
1. Voir sur quel branche on est
|
|
|
|

|
|
|
|
2. Créer une nouvelle branche
|
|
|
|

|
|
|
|

|
|
|
|
3. Faire une demande de fusion via gitlab
|
|
|
|

|
|
|
|

|
|
|
|
4. Faire une review de code sur gitlab
|
|
|
|

|
|
|
|

|
|
|
|
Avant d'accepter aller sur `changes` et relire le code, au besoin on peut cliquer à gauche à côté du code pour écrire un message / demander des changements :
|
|
|
|

|
|
|
|
|
|
|
|
5. Fusionner une branche
|
|
|
|
|
|
|
|
#### En ligne de commande
|
|
|
|
|
|
|
|
1. Créer une branche `git checkout -b maBranche`
|
|
|
|
2. Changer de branche `git switch` (penser à committer ou [stasher](#l-etagere) vos modifications avant
|
|
|
|
|
|
|
|
#### Conventions
|
|
|
|
|
|
|
|
Si vous appelez vos branche `n-ma-branche` (au lieu de `ma-branche`) ou `n` est un numéro d'issue gitlab, alors ce dernier reconnaîtra que votre branche est liée à l'issue `n` et mettra un lien dans le fil de discussion de l'issue
|
|
|
|
|
|
|
|
### L'étagère
|
|
|
|
|
|
|
|
Parfois il est nécessaire d'enregistrer des modifications et de les mettre de côté pour les reprendre plus tard, pour cela il est possible de faire `git stash` toutes vos modifications sont alors empilées sur une "étagère", vous pouvez changer de branche et quand vous voulez les récupèrer : `git stash pop`
|
|
|
|
|
|
|
|
### Schéma du fonctionnement des commandes principales
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
graph LR
|
|
|
|
subgraph local
|
|
|
|
W
|
|
|
|
S
|
|
|
|
L
|
|
|
|
end
|
|
|
|
|
|
|
|
W(Espace de travail) -->|git add| S(Staging)
|
|
|
|
S -->|git commit| L[(Dépot Local)]
|
|
|
|
W -->|git commit -a| L
|
|
|
|
L -->|git push| R[(Dépot distant)]
|
|
|
|
R -->|git fetch| L
|
|
|
|
L -->|git merge| W
|
|
|
|
R -->|git pull| W
|
|
|
|
|
|
|
|
``` |
|
|
|
\ No newline at end of file |