Installation
Travailler avec git
Logiciels
Source Tree
19 min
Ungit
09 min
Github Mac
08 min
GitKraken
13 min

Utiliser un dépôt git en local c'est bien, mais le gros intérêt du versionning c'est de pouvoir travailler à distance mais aussi de collaborer à plusieurs.

--bare

Lorsque l'on fait un git init on a la possibilité d'ajouter le drapeau --bare. Cette option permet de préciser que ce dossier ne contiendra pas de dossier de travail mais seulement l'historique de notre projet. Ces dossiers --bare peuvent être utilisés comme dépôt distant.

cd mon-remote
git init --bare

Avec git n'importe quoi peut servir de dépôt distant. On peut utiliser un dossier spécifique, un chemin ssh://, un service tiers comme bitbucket ou github. Je vous conseille de vous faire la main avec un dossier servant de remote dans un premier temps avant de vous lancer sur ces services qui introduisent de nouvelles notions.

remote

La commande remotevous permet de créer voir et supprimer des connexions. Il faut voir ces connexions comme de simples alias vers le véritable chemin du dépôt. Ces chemins étant beaucoup plus simple à taper et surtout à retenir !

git remote # Liste les dépôts distants
git remote -v # Liste les dépôts distants et les chemins associés
git remote add <alias> <chemin/url> # Ajoute un nouveau dépôt distant
git remote rm <alias> # Supprimé un dépôt distant
git remote rename <old> <new>

push

La commande push permet de transférer les commits locaux vers le dépôt distant.

git push <remote> <branche>
git push <remote> --all # Permet d'envoyer toutes les branches

La commande push permet d'envoyer tous les commits d'une ou plusieurs branche au dépôt distant. Git ne permet pas de push si le dépôt distant est en décalage (pas de fast-forward possible) et dans ce cas là vous pouvez utiliser le drapreau --force

git push <remote> --force 

Ce drapeau doit être utilisé en dernier recours (normalement vous n'en aurez jamais besoin) car il va modifier l'historique distant et peu ainsi affecter tous les collaborateurs. Mais ça peut être utile en cas de problème, si par exemple vous envoyez un commit en oubliant de retirer une clef d'API ou une information sensible.

fetch

La commande fetch permet d'importer les informations du dépôt distant. L'import se fait à travers des branches spéciales pour nous donner la possibiliter de comparer et si besoin fusionner manuellement.

git fetch <remote> # Récupère toutes les branches et tous les commits 
git fetch <remote> <branche>

En général on peut sauter cette étape mais si on souhaite par exemple comparer notre branche master à celle disponible à distance un fetch est essentiel.

git fetch origin master 
git log master..origin/master # Permet de voir les commits entre ma branche master et celle du remote

Si les modifications me semble acceptable pour une fusion je peux alors fusionner manuellement

git merge origin/master

pull

Récupérer les infos du remote avec un fetch puis un merge n'est pas forcément très "user-friendly". La commande pull permet de faire un git fetch suivi d'un git merge en une seule commande.

git pull <remote>
git pull <remote> <branche>

Si votre dépôt local est en avance git fera alors un 3-way merge. Si vous souhaitez éviter ça vous pouvez demander à git de faire un rebase automatiquement lors du pull.

git pull --rebase <remote> 

Il est possible d'indiquer à git que l'on souhaite faire un rebase par défaut en modifiant dans la configuration branch.autosetuprebase.

git config --global branch.autosetuprebase always

Cela permet d'éviter de "poluer" l'historique de multiples "merge origin/master".