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.

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 diagramme suivant représente deux connexions distantes à partir de votre dépôt dans le dépôt centralisé et le dépôt d'un autre développeur. 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.

Utilisation de git remote pour établir une connexion avec d'autres dépôts

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

Répertorie vos connexions distantes avec d'autres dépôts.

git remote -v

Comme la commande ci-dessus, mais 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>

Create a new connection to a remote repository. After adding a remote, you’ll be able to use <name> as a convenient shortcut for <url> in other Git commands.

git remote rm <name>

Remove the connection to the remote repository called <name>.

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

Rename a remote connection from <old-name> to <new-name>.

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 pusher manuellement 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 grâce à 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 pusher des 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 une analyse des sous-commandes git remote les plus fréquemment utilisées.

ADD <NAME> <URL>

Adds a record to ./.git/config for remote named <name> at the repository url <url>.

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

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

RENAME <OLD> <NEW>

Updates ./.git/config to rename the record <OLD> to <NEW>. All remote-tracking branches and configuration settings for the remote are updated.

REMOVE or RM <NAME>

Modifies ./.git/config and removes the remote named <NAME>. All remote-tracking branches and configuration settings for the remote are removed.

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.

--all permet de répertorier toutes les URL du dépôt distant.

SHOW <NAME>

Outputs high-level information about the remote <NAME>.

PRUNE <NAME>

Deletes any local branches for <NAME> that are not present on the remote repository.

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 avec « 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/jean.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 de grands projets.

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 comme raccourci pratique pour 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: main
   Remote branches:
      main tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      main pushes to main (fast-forwardable)

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

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

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

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

This example will upload the local state of <branch-name> to the remote repository specified by <remote-name>.

Renommer et supprimer des dépôts distants

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

The command git remote rename is self-explanatory. When executed, this command will rename a remote connection from <old-name> to <new-name>. Additionally, this will modify the contents of ./.git/config to rename the record for the remote there as well.

git remote rm <name>

The command git remote rm will remove the connection to the remote repository specified by the <name> parameter. To demonstrate let us 'undo' the remote addition from our last example. If we execute git remote rm remote_test, and then examine the contents of ./.git/config we can see that the [remote "remote_test"] record is no longer there.