Un dépôt que toute l’équipe partage
Un dépôt distant est une copie d’un dépôt Git gardée sur un serveur que toute une équipe partage. On le clone pour travailler, on y envoie ses commits avec push et on reçoit ceux des autres avec pull.
Sans serveur commun, chacun garde ses commits sur son ordinateur et personne ne voit le travail des autres. Gitea, GitHub et GitLab sont des serveurs de ce genre.
À la fin de cette leçon
Remarque
Je peux cloner un dépôt, pousser mes commits et tirer ceux des autres.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Dépôt distant | une copie du dépôt gardée sur un serveur | |
| origin | le nom habituel du dépôt distant d’où vient le clone | |
| Cloner | copier un dépôt distant avec tout son historique | git clone |
| Push | envoyer ses commits vers le dépôt distant | git push |
| Fetch | télécharger les commits distants sans les fusionner | git fetch |
| Pull | télécharger les commits distants, puis les fusionner | git pull |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un dépôt distant est une copie partagée
Un dépôt distant est une copie du dépôt gardée sur un serveur. Celui du labo s’appelle Gitea. Cloner, c’est copier ce dépôt chez vous avec tout son historique.
Git retient d’où vient le clone sous le nom origin. git remote -v affiche ce nom et l’adresse du serveur. Le clone connaît aussi la branche du serveur, origin/main, qu’il compare à votre main.
Cloner hello-git dans le dossier copie
git clone http://gitea:3000/student/hello-git.git copieAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Voir d’où vient le clone
git -C copie remote -vAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Comparer votre branche à celle du serveur
git -C copie status -sbAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Avance et retard comparent deux historiques
Votre branche et celle du serveur peuvent différer. Si vous avez des commits que le serveur n’a pas, vous êtes en avance. S’il en a que vous n’avez pas, vous êtes en retard. Les deux à la fois : les historiques ont divergé.
git push envoie vos commits. git fetch télécharge ceux du serveur sans les fusionner. git pull fait un fetch, puis fusionne.
Exemple travaillé : lire l’état d’une branche
| Git écrit | Sens | Ce qu’on fait |
|---|---|---|
| Rien entre crochets | Les deux historiques sont pareils | Rien |
| [ahead 1] | Un commit à envoyer | git push |
| [behind 2] | Deux commits à recevoir | git pull |
| [ahead 1, behind 1] | Les historiques ont divergé | git pull, régler, puis git push |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Faire un commit vide pour l’essai
git -C copie commit --allow-empty -m "Essai local"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Relire l’état de la branche
git -C copie status -sbAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un serveur d’essai pour deux personnes
Pour voir le retard, il faut deux personnes. Vous allez jouer Alice et Bob avec un serveur d’essai : un dépôt nu, sans dossier de travail, sur le disque. Il ne sert qu’à échanger des commits.
Alice envoie deux commits. Bob clone entre les deux et se retrouve en retard. Le commit d’essai du dossier copie ne part jamais vers Gitea.
Créer le serveur d’essai
git init --bare -b main depot.gitAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Cloner le serveur pour Alice
git clone depot.git aliceAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Alice fait un premier commit
git -C alice commit --allow-empty -m "Premier commit"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Alice pousse sa branche main
git -C alice push -u origin mainAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Cloner le serveur pour Bob
git clone depot.git bobAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Alice fait un deuxième commit
git -C alice commit --allow-empty -m "Deuxieme commit"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Alice pousse de nouveau
git -C alice pushAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Bob télécharge sans fusionner
git -C bob fetchAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Bob lit son retard
git -C bob status -sbAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Bob reçoit le commit d’Alice
git -C bob pullAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
On croit souvent que git push envoie tout, quoi qu’il arrive. Ce n’est pas vrai : si le serveur a des commits que vous n’avez pas, Git refuse le push. Tirez d’abord, réglez les conflits s’il y en a, puis poussez.