Ce post est la suite de notre article GIT - 2 - les branches.
13. Dépôt distant
Avoir un dépôt (repository) en local c’est très bien mais lorsqu’il s’agit de travailler à plusieurs, il est indispensable de mettre en place un dépôt distant.
Pour ce faire, il existe deux solutions :
- utiliser un simple serveur de fichier,
- utiliser une des nombreuses plateformes dédiées à l’hébergement de dépôt : GitLabs, GitHub, BitBucket…
L’utilisation d’une plateforme dédiée offre plein d’avantages car chaque plateforme intègre des outils devops (Pipeline, Test, Pull Request, SCRUM Boards…).
13.1 Bare
Si vous souhaitez utiliser un simple serveur ou un dossier partagé, vous pouvez très bien créer un dépôt distant en utilisant la commande suivante :
git init --bare
bare
(nue) signifie que le dépôt ne contiendra pas de répertoire de travail.
Il ne stockera que ce qui concerne les commits.
Il ne sera pas possible de travailler dans ce dépôt (pas de répertoire de travail).
13.2 GitHub
Nous allons utiliser GitHub pour la suite de ce tuto.
Si nous n’avez pas encore de compte (😮 quoi?), nous vous invitons à en créer un…
Vous pouvez créer un dépôt distant sur cette page : https://github.com/new
Attention : Si vous créez un dépôt distant public, votre code sera disponible sur internet!
Ensuite utilisez la ligne suivante pour définir comme dépôt distant le dépôt GitHub avec comme nom origin
:
git remote add origin https://github.com/c2s-bouygues/git-tuto.git
Utilisez la commande suivante pour pousser votre branche main
sur le dépôt distant :
git push -u origin main
Retournez sur la branche main :
git checkout main
Vous devez à présent avoir la mention origin/main
qui indique où en est votre dépôt distant :
MINGW64 ~/source/repos/agora/github/mon-premier-repo (main)
$ git lg
* 160c615 - (HEAD -> main, origin/main) modification de 1erFichier.txt sur onFirstCommit
* cbc6bfa - ajout de cherryToPick.txt
* cc665a6 - Merge branch 'branchToMerge'
|\
| * 97115b5 - (branchToMerge) modification de addedOnBranchToMerge.txt
| * c55aecb - ajout de addedOnBranchToMerge.txt
* | 2805653 - 2ème modification de 2emeFichier.txt
|/
* 9ef588c - modification de 2emeFichier.txt
* d2f1efe - (branchToRebase) modification de addedOnBranchToRebase.txt
* d609c65 - ajout de addedOnBranchToMerge.txt
* d17c78e - ajout de 2emeFichier.txt et modification de 1erFichier.txt
* 38db667 - creation du dépôt ajout de 1erFichier.txt
Note : Il est tout à fait possible d’utiliser plusieurs dépôt distants.
13.4 Clone
Pour l’instant nous travaillons seul avec un dépôt local. Que se passe-t’il si quelqu’un fait un commit sur le dépôt distant?
Pour pour mettre en pratique ce cas précis, nous allons récupérer notre dépôt distant dans un autre répertoire.
Créez un dossier mon-second-repo
en dehors de votre dépôt local actuel :
cd ..
mkdir mon-second-repo
cd mon-second-repo
A présent pour récupérer le code que vous avez poussé dans votre dépôt GitHub nous allons le cloner avec la commande suivante :
git clone https://github.com/c2s-bouygues/git-tuto.git
Ouvrez le répertoire qui porte le nom du dépôt GitHub avec Visual Studio Code et ouvrez un git bash dans ce dossier.
Nous avons récupéré l’intégralité du dépôt que nous venions de pousser.
14 Synchronisation
14.1 Push
Nous allons créer une branche dans ce nouveau dépôt afin de l’envoyer sur origin
(Github).
Utiliser la commande :
git checkout -b createdInSecondRepo
Puis la commande suivante :
git push
Vous obtenez ce message :
MINGW64 ~/source/repos/agora/github/mon-second-repo/git-tuto (createdInSecondRepo)
$ git push
fatal: The current branch createdInSecondRepo has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin createdInSecondRepo
Il n’est pas possible de pousser vers une branche qui n’existe pas!
Il est nécessaire de créer la branche dans le dépôt local avant.
Utilisez la commande indiquée par Git Bash :
git push --set-upstream origin createdInSecondRepo
La branche est maintenant présente sur Github
$ git lg -5
* 160c615 - (HEAD -> createdInSecondRepo, origin/main, origin/createdInSecondRepo, origin/HEAD, main) modification de 1erFichier.txt sur onFirstCommit
* cbc6bfa - ajout de cherryToPick.txt
* cc665a6 - Merge branch 'branchToMerge'
|\
| * 97115b5 - modification de addedOnBranchToMerge.txt
| * c55aecb - ajout de addedOnBranchToMerge.txt
Ajoutez un fichier puis faites un commit sur votre poste :
touch addedInSecondRepo.txt
git add .
git commit -m "ajout de addedInSecondRepo.txt"
Voilà le résultat :
MINGW64 ~/source/repos/agora/github/mon-second-repo/git-tuto (createdInSecondRepo)
$ git lg -5
* a0b3cbc - (HEAD -> createdInSecondRepo) ajout de addedInSecondRepo.txt
* 160c615 - (origin/main, origin/createdInSecondRepo, origin/HEAD, main) modification de 1erFichier.txt sur onFirstCommit
* cbc6bfa - ajout de cherryToPick.txt
* cc665a6 - Merge branch 'branchToMerge'
|\
| * 97115b5 - modification de addedOnBranchToMerge.txt
Notre dépôt local a un commit d’avance sur origin
(Github)
Nous pouvons maintenant utiliser la commande git push
afin d’envoyer nos modifications sur le serveur distant :
git push
14.2 Fetch
Dans Visual Studio Code, retournez à présent dans le dossier de votre premier dépôt mon-premier-repo
et faites un git lg --branches=* -5 --all
MINGW64 ~/source/repos/agora/github/mon-premier-repo (main)
$ git lg --branches=* -5 --all
* 160c615 - (HEAD -> main, origin/main) modification de 1erFichier.txt sur onFirstCommit
* cbc6bfa - ajout de cherryToPick.txt
* cc665a6 - Merge branch 'branchToMerge'
|\
| * 97115b5 - (branchToMerge) modification de addedOnBranchToMerge.txt
| * c55aecb - ajout de addedOnBranchToMerge.txt
Nous ne sommes pas informés des modifications sur le dépôt distant tant que nous n’avons pas utilisé la commande suivante :
git fetch
Fetch signifie “aller chercher”.
Cette commande permet de récupérer la liste des modifications qui ont eu lieu sur le dépôt distant.
On fois que vous avez effectué cette commande vous devez à présent voir la branche createdInSecondRepo
sur origin (Github):
MINGW64 ~/source/repos/agora/github/mon-premier-repo (main)
$ git fetch
From https://github.com/c2s-bouygues/git-tuto
* [new branch] createdInSecondRepo -> origin/createdInSecondRepo
MINGW64 ~/source/repos/agora/github/mon-premier-repo (main)
$ git lg --branches=* -5 --all
* 160c615 - (HEAD -> main, origin/main, origin/createdInSecondRepo) modification de 1erFichier.txt sur onFirstCommit
* cbc6bfa - ajout de cherryToPick.txt
* cc665a6 - Merge branch 'branchToMerge'
|\
| * 97115b5 - (branchToMerge) modification de addedOnBranchToMerge.txt
| * c55aecb - ajout de addedOnBranchToMerge.txt
Une fois qu’une branche est dans votre dépôt, vous pouvez basculer votre répertoire de travail dessus en faisant git checkout nomDeLaBranche
git checkout createdInSecondRepo
Vous êtes à présent dans la branche createdInSecondRepo
récupérée depuis origin
(Github).
14.3 Pull
Si vous souhaitez récupérer uniquement les modifications faites dans la branche courante, il est possible de les tirer (pull) avec la commande :
git pull
Dans le dépôt mon-premier-repo
, ajoutez un fichier dans la branche createdInSecondRepo
:
touch addedInFirstRepo.txt
git add .
git commit -m "ajout de addedInFirstRepo.txt"
Ensuite poussez ce commit sur origin avec la commande suivante :
git push
Retournez dans votre deuxième dépôt /mon-second-repo/git-tuto
et utilisez la commande suivante :
git pull
Vous avez récupéré le fichier addedInFirstRepo.txt
en passant pas Github !
MINGW64 ~/source/repos/agora/github/mon-second-repo/git-tuto (createdInSecondRepo)
$ git lg -5
* 8331153 - (HEAD -> createdInSecondRepo, origin/createdInSecondRepo) ajout de addedInFirstRepo.txt (Alex 4 minutes ago)
* 4f74132 - (origin/2ndCreatedInSecondRepo) ajout de addedInSecondRepo.txt (Alex 11 minutes ago)
* 160c615 - (origin/main, origin/HEAD, main) modification de 1erFichier.txt sur onFirstCommit (Alex 3 hours ago)
* cbc6bfa - ajout de cherryToPick.txt (Alex 3 hours ago)
* cc665a6 - Merge branch 'branchToMerge' (Alex 3 hours ago)
|\
La suite
Vous pouvez à présent utilisez Git sans problèmes mais sachez qu’il vous reste toujours des choses à apprendre sur cet outil riche en fonctionnalité et ce que nous continuerons de faire dans notre prochain post sur Git : GIT - 4 - les Tips (coming soon)!