Cette feuille essaye de répondre à une question posée sur le salon sysadmin_git
du mattermost pour vous permettre de démarrer rapidement sur l'utilisation de git
pour l'UE projet.
Elle est du type « recette de cuisine » mais ne vous permettra pas d'avoir suffisamment de hauteur pour pouvoir vous adapter à toutes les situations pouvant apparaître dans divers workflows. Pour cela, vous devez a minima être capable de visualiser les différents objets et leurs interactions (par exemple, étant donnée une situation concrète, être capable de dessiner l'état du worktree local, de la staging-area locale, du dépôt local, des dépôts distants (en: remote), ainsi que leurs divers pointeurs (e.g. telle branche de tel remote pointe sur tel commit), puis de prévoir l'action d'une commande sur ce système).
Le cours d'administration système devrait vous rendre capable d'héberger vous-même vos dépôts partagés.
En attendant, je vous suggère d'héberger vos dépôts partagés sur le gitlab de l'université, qui se trouve à l'adresse https://gitlab.sorbonne-paris-nord.fr/
N'hésitez pas à inviter vos enseignant·es si vous avez besoin de retours sur l'utilisation de git (par exemple problème de merge, cf plus bas).
parabox
:
https://gitlab.sorbonne-paris-nord.fr/<nom_groupe>/<nom_dépôt>.git
)Certaines personnes m'ont demandé quel workflow suivre. Il faut comprendre que git est un outil flexible, qui permet plusieurs façons de s'organiser collectivement. C'est cette organisation collective qu'on appelle « workflow », elle n'est pas prescrite par git.
Par exemple, l'exercice « cadavre exquis » du TP en autonomie propose un workflow ou chaque participant·es modifie et pousse sa propre branche sur un dépôt central, et c'est un·e « release manager » qui merge ces branches dans la branche main
en s'assurant que tout se passe bien.
Pour commencer, je vous propose d'utiliser un workflow très simple :
votre groupe de projet partage un unique dépôt commun, hébergé sur gitlab (voir section précédente). Ce dépôt a une unique branche nommée main
.
chaque étudiant·e du groupe possède une copie du dépôt commun sur sa machine personnelle, obtenue par la commande :
$ git clone <URL>
Le remote gitlab sera nommé automatiquement
origin
(observez le fichier.git/config
dans votre répertoire de travail)
ensuite, suivez la boucle suivante :
avant de faire des changements sur le code, récupérez l'état courant de la branche
main
qui se trouve sur le remoteorigin
:$ git pull origin main
faites vos changements et commitez-les sur la branche
main
de votre dépôt local (cf slides « boucle locale ») :$ # éditer et compiler un <fichier>, tester le résultat $ git add <fichier> $ git commit -m "<commentaire>" $ # éditer et compiler un <fichier>, tester le résultat $ git add <fichier> $ git commit -m "<commentaire>" ...
lorsque vous êtes satisfait·e de vos changements, partagez-les en poussant votre branche locale
main
sur le dépôt communorigin
:$ git push origin main
Si la commande git push origin main
refuse de pousser votre branche main
sur le dépôt origin
, c'est en général parce que la branche origin/main
a été modifiée depuis votre dernier pull (lisez le message d'erreur !), de sorte que la branche origin/main
n'est plus un ancêtre de votre branche locale main
.
La raison la plus probable est qu'un·e autre étudiant·e a poussé sa propre branche main
entre-temps. Il faut donc :
récupérer la nouvelle branche origin/main
:
$ git fetch origin main
merger cette branche dans la branche courante main
:
$ git merge origin/main
Si le merge ne demande pas d'arbitrage humain, git fait le merge automatiquement et ouvre un éditeur pour vous proposer de modifier le commentaire "Merge remote-tracking branch ..."
. Sauvegardez ce commentaire pour finaliser le commit.
Si le merge demande un arbitrage humain, il vous faut modifier les fichiers qui portent un conflit, les ajouter à la staging area, puis commiter. Pour savoir où vous en êtes du merge en cours, utilisez la commande :
$ git status
pousser votre branche locale main
vers le dépôt origin
:
$ git push origin main
Pensez à pousser vos changements régulièrement pour éviter ce problème.
Si l'activité de votre groupe de projet est telle que ce problème apparaît trop souvent, réfléchissez à un workflow mettant en jeu plusieurs branches.