SVN utilise un dépôt centralisé unique comme hub de communication pour les développeurs. La collaboration passe par des ensembles de changements entre les copies de travail des développeurs et le dépôt centralisé. C'est différent du modèle de collaboration distribué de Git. En effet, ce dernier fournit à chaque développeur sa propre copie du dépôt, avec son propre historique local et sa structure de branche. Les utilisateurs partagent généralement une série de commits et non un ensemble de changements unique. Au lieu de commiter un ensemble de changements à partir d'une copie de travail vers le dépôt centralisé, Git vous permet de partager des branches entières entre les dépôts.

La commande git remote constitue l'une des composantes d'un système plus vaste responsable de synchroniser les changements. Les enregistrements effectués par la commande git remote sont utilisés conjointement avec les commandes git fetch, git push et git pull. Toutes ont leurs propres responsabilités de synchronisation, que vous pouvez découvrir en consultant les liens correspondants.

git remote

La commande git remote vous permet de créer, d'afficher et de supprimer des connexions avec d'autres dépôts. Les connexions distantes ressemblent plus à des signets qu'à des liens directs vers d'autres dépôts. Au lieu de fournir un accès en temps réel à un autre dépôt, elles servent de noms peu complexes qui peuvent être utilisés pour référencer une URL peu pratique.

Par exemple, le schéma suivant représente deux connexions distantes entre votre dépôt et le dépôt centralisé d'une part, et votre dépôt et celui d'un autre développeur d'autre part. Au lieu de les référencer par leurs URL complètes, vous pouvez transmettre le dépôt d'origine et les raccourcis de Jean à d'autres commandes Git.

Using git remote to connect other repositories

Aperçu de l'utilisation de git remote

Pour résumer, la commande git remote est une interface permettant de gérer une liste d'entrées distantes stockées dans le fichier ./.git/config du dépôt. Les commandes suivantes sont utilisées pour afficher l'état actuel de la liste distante.

Afficher des configurations git remote

git remote

Permet de répertorier vos connexions distantes avec d'autres dépôts.

git remote -v

Cette commande est similaire à celle ci-dessus, mais elle inclut l'URL de chaque connexion.

Création et modification de configurations git remote

La commande git remote constitue également une méthode ou une aide pratique pour modifier le fichier ./.git/config d'un dépôt. Les commandes présentées ci-dessous vous permettent de gérer des connexions avec d'autres dépôts. Elles modifient le fichier /.git/config du dépôt. Vous pouvez cependant obtenir le même résultat en modifiant directement le fichier ./.git/config à l'aide d'un éditeur de texte.

git remote add <name> <url>

Permet de créer une connexion avec un dépôt distant. Après avoir ajouté un dépôt distant, vous pourrez utiliser <nom> comme raccourci pratique vers <url> dans d'autres commandes Git.

git remote rm <name>

Permet de supprimer la connexion avec le dépôt distant nommé <nom>.

git remote rename <old-name> <new-name>

Permet de renommer la connexion distante <ancien-nom> en <nouveau-nom>.

Discussion sur git remote

Git est conçu pour offrir à chaque développeur un environnement de développement totalement isolé. Par conséquent, les informations ne sont pas automatiquement échangées entre les dépôts. Au lieu de cela, les développeurs doivent faire un pull manuel des commits vers leur dépôt local et faire un push manuel de leurs commits locaux vers le dépôt centralisé. La commande git remote est juste un moyen plus simple de transmettre les URL à ces commandes de « partage ».

Remote d'origine

Lorsque vous clonez un dépôt avec git clone, une connexion distante nommée origin et pointant vers le dépôt cloné est automatiquement créée. C'est particulièrement utile pour les développeurs qui créent une copie locale d'un dépôt centralisé, puisque cela permet de faire un pull des changements en amont ou de publier les commits locaux. Ce comportement explique aussi pourquoi les projets Git nomment le dépôt centralisé « origin ».

URL du dépôt

Git prend en charge différentes méthodes de référenciation du dépôt distant. Les protocoles HTTP et SSH comptent parmi les méthodes d'accès au dépôt distant les plus faciles. Le protocole HTTP permet d'autoriser facilement l'accès anonyme et en lecture seule à un dépôt. Par exemple :

http://host/path/to/repo.git

Toutefois, il n'est généralement pas possible de faire un push de commits vers une adresse HTTP (vous ne voudriez de toute façon pas autoriser les pushs anonymes). En revanche, pour l'accès en lecture-écriture, vous devriez utiliser le protocole SSH :

ssh://user@host/path/to/repo.git

Vous aurez simplement besoin d'un compte SSH valide sur l'ordinateur hôte. Pour le reste, Git prend directement en charge l'accès authentifié par protocole SSH. Les solutions d'hébergement tierces modernes et sécurisées comme Bitbucket.com vous fournissent ces URL.

Commandes git remote

git remote est l'une des nombreuses commandes Git acceptant l'ajout de « sous-commandes » supplémentaires. Vous trouverez ci-dessous un examen des sous-commandes git remote les plus fréquemment utilisées.

ADD <NAME> <URL>

Ajoute un enregistrement à ./.git/config pour le dépôt dépôt distant nommé <nom> se trouvant à l'URL <url>.

Accepte une option -f qui va immédiatement lancer une commande git fetch <nom> une fois l'enregistrement de dépôt distant créé.

Accepte une option --tags qui va immédiatement lancer une commande git fetch <nom> et importer chaque tag dans le dépôt distant.

RENAME <OLD> <NEW>

Met à jour ./.git/config pour renommer l'enregistrement <ANCIEN> en <NOUVEAU>. Toutes les branches de suivi distantes et tous les paramètres de configuration du dépôt distant sont mis à jour.

REMOVE or RM <NAME>

Modifie ./.git/config et supprime le dépôt distant nommé <NOM>. Toutes les branches de suivi distantes et tous les paramètres de configuration du dépôt distant sont supprimés.

GET-URL <NAME>

Renvoie les URL d'un enregistrement distant.

Accepte l'option --push ; les URL de push sont interrogées au détriment des URL de fetch.

Avec --all, toutes les URL du dépôt distant sont répertoriées.

SHOW <NAME>

Renvoie des informations générales sur le dépôt distant <NOM>.

PRUNE <NAME>

Supprime toute branche locale de <NOM> qui n'est pas présente dans le dépôt distant.

Accepte une option --dry-run qui va répertorier les branches configurées pour être nettoyées, mais qui ne le seront pas réellement.

Exemples de commandes git remote

Outre à « origin », il est souvent utile d'établir une connexion avec les dépôts des membres de votre équipe. Par exemple, si votre collègue Jean gère un dépôt accessible publiquement à l'adresse dev.example.com/john.git, vous pouvez ajouter une connexion comme suit :

git remote add john http://dev.example.com/john.git

Ce type d'accès aux dépôts individuels des développeurs permet de collaborer en dehors du dépôt centralisé. Cela s'avère très utile pour les petites équipes qui travaillent sur un projet d'envergure.

Afficher vos connexions distantes

Par défaut, la commande git remote répertorie les connexions distantes avec d'autres dépôts précédemment stockées. Elle renvoie une sortie à une seule ligne qui indique les noms de « signet » des dépôts distants.

$ git remote
origin
upstream
other_users_repo

Si vous appelez git remote avec l'option -v, vous imprimerez la liste des noms de dépôt marqués d'un signet, ainsi que l'URL de dépôt correspondante. L'option -v signifie « verbose » ou détaillé. Voici un exemple de sortie détaillée de git remote.

git remote -v
origin  git@bitbucket.com:origin_user/reponame.git (fetch)
origin  git@bitbucket.com:origin_user/reponame.git (push)
upstream    https://bitbucket.com/upstream_user/reponame.git (fetch)
upstream    https://bitbucket.com/upstream_user/reponame.git (push)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (fetch)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (push)

Ajouter des dépôts distants

La commande git remote add crée un enregistrement de connexion avec un dépôt distant. Après avoir ajouté un dépôt distant, vous pourrez utiliser <nom> comme raccourci pratique pour <url> dans d'autres commandes Git. Pour de plus amples informations sur la syntaxe d'URL acceptée, consultez la section « URL de dépôts » ci-dessous. Cette commande crée un enregistrement dans le fichier ./.git/config du dépôt. Exemple de mise à jour de ce fichier de configuration :

$ git remote add fake_test https://bitbucket.com/upstream_user/reponame.git; [remote "remote_test"] 
   url = https://bitbucket.com/upstream_user/reponame.git 
   fetch = +refs/heads/*:refs/remotes/remote_test/*

Inspecter un dépôt distant

La sous-commande show peut être ajoutée à git remote pour obtenir une sortie détaillée sur la configuration d'un dépôt distant. Cette sortie contient une liste des branches associées au dépôt distant, ainsi que les points de terminaison liés pour les fetch et les push.

git remote show upstream
* remote upstream
   Fetch URL: https://bitbucket.com/upstream_user/reponame.git
   Push URL: https://bitbucket.com/upstream_user/reponame.git
   HEAD branch: master
   Remote branches:
      master tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      master pushes to master (fast-forwardable)

Faire des fetch et des pull depuis des dépôts distants Git

Dès que vous avez configuré un enregistrement distant à l'aide de la commande git remote, vous pouvez transmettre le nom distant en tant qu'argument aux autres commandes Git afin de communiquer avec le dépôt distant. Vous pouvez utiliser les commandes git fetch et git pull pour lire du contenu sur un dépôt distant. Toutes deux ont un fonctionnement différent, qui est expliqué plus en détail dans les liens correspondants.

Faire des push vers des dépôts distants Git

La commande git push permet d'écrire sur un dépôt distant.

git push <remote-name> <branch-name>

Dans cet exemple, l'état local de <nom-branche> va être chargé sur le dépôt distant spécifié par <nom-distant>.

Renommer et supprimer des dépôts distants

git remote rename <old-name> <new-name>

La commande git remote rename parle d'elle-même. Lorsqu'elle est exécutée, elle renomme une connexion distante de <ancien-nom> en <nouveau-nom>. En outre, elle modifie le contenu du fichier ./.git/config afin de renommer l'enregistrement du dépôt distant.

git remote rm <name>

La commande git remote rm supprime la connexion avec le dépôt distant spécifié par le paramètre <nom>. Pour illustrer nos propos, nous allons annuler l'ajout du dépôt distant de l'exemple précédent. Si nous exécutons git remote rm remote_test et si nous examinons le contenu de ./.git/config, nous pouvons voir que l'enregistrement [remote "remote_test"] n'y figure plus.