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

git-hub-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.

git-clone

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

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.

git-fetch

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

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)!