653 votes

Quelle est la différence entre git clone --mirror et git clone --bare ?

La page d'aide de git clone contient ce qui suit --mirror :

Mettre en place un miroir du dépôt distant. Cela implique que --bare .

Mais il n'entre pas dans les détails de la manière dont la --mirror est différent d'un clone --bare clone.

6 votes

Utile, mais si vous voulez aussi pousser ce miroir vers un repo distant comme github, j'ai trouvé ce lien pratique.

18voto

PaulMurrayCbr Points 372

Un clone copie les refs de la télécommande et les place dans un sous-répertoire nommé "ce sont les refs que possède la télécommande".

Un miroir copie les références du site distant et les place dans son propre niveau supérieur - il remplace ses propres références par celles du site distant.

Cela signifie que lorsque quelqu'un tire de votre miroir et place les refs du miroir dans son sous-répertoire, il obtiendra les mêmes refs que ceux qui se trouvaient sur l'original. Le résultat de la récupération à partir d'un miroir à jour est le même que la récupération directement à partir du repo initial.

10voto

Ahmmad Ismail Points 383

Contrairement à git clone , git clone --mirror y git clone --bare Les deux sont des dépôts nus. La différence entre les deux réside dans le config fichier.

git clone ressemble à un fichier de configuration :

[remote "origin"]
    url = https://github.com/example
    fetch = +refs/heads/*:refs/remotes/origin/*

git clone --bare ressemble à un fichier de configuration :

[remote "origin"]
    url = https://github.com/example

git clone --mirror ressemble à un fichier de configuration :

[remote "origin"]
    url = https://github.com/example
    fetch = +refs/*:refs/*
    mirror = true

Nous constatons donc que la principale différence réside dans l'utilisation de la refspec à utiliser pour la recherche

Le format de la spécification de référence est, tout d'abord, un élément optionnel + , suivi de <src>:<dst> donde <src> est le modèle pour les références sur le du côté distant et <dst> est l'endroit où ces références seront suivies localement. Les + indique à Git de mettre à jour la référence même s'il ne s'agit pas d'une référence avance rapide.

En cas de git clone qui est automatiquement écrit par un git remote add origin Git récupère toutes les références sous la commande refs/heads/ sur le serveur et les écrit dans refs/remotes/origin/ localement.

En cas de git clone --bare il n'y a pas de refspec à utiliser pour la recherche.

En cas de git clone --mirror La spécification de référence à utiliser pour la recherche ressemble à ce qui suit fetch = +refs/*:refs/* . Cela signifie, tags , remotes , replace (qui est sous refs ) avec heads sera également récupérée. Notez que, par défaut git clone ne récupérer que heads .

NOTE 1 : git clone --mirror y git clone --bare --mirror sont équivalents.

NOTE 2 : il y a également des différences dans packed-refs . Comme il enregistre les mêmes informations que refs/heads/ , refs/tags/ et les amis enregistrent de manière plus efficace.

9voto

Shantanu Singh Points 137
$ git clone --bare https://github.com/example

Cette commande rendra le nouveau " example "lui-même le répertoire $GIT_DIR (au lieu de example/.git ). De même, les têtes de branches à distance sont copiées directement dans les têtes de branches locales correspondantes, sans mise en correspondance. Lorsque cette option est utilisée, ni les branches de suivi à distance ni les variables de configuration correspondantes ne sont créées.

$ git clone --mirror https://github.com/example

Comme pour un clone nu, un clone miroir inclut toutes les branches et étiquettes distantes, mais toutes les références locales (y compris les branches de suivi à distance, les notes, etc.) seront écrasées à chaque fois que vous récupérez, de sorte qu'il sera toujours identique au dépôt original.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X