IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GIT Discussion :

différence entre flag track et set-upstream-to


Sujet :

GIT

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut différence entre flag track et set-upstream-to
    Bonjour. J'ai une question

    Supposons que j'ai un dépôt distant nommé origin dans lequel existe une branche nommée 'brserveur' que je n'ai pas en local

    Pour récupérer cette branche dans une nouvelle branche locale brlocal, j'ai compris qu'on peut se servir de deux commandes*:

    git branch --track brlocal origin/brserveur
    git branch --set-upstream-to brlocal origin/brserveur

    Quelle est la différence entre ces deux commandes ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 499
    Par défaut
    Hello,

    Ces deux commandes peuvent respectivement s'abréger en « -t » et « -u ».

    • « -u » ou « --set-upstream-to » te permettent de définir ou de modifier l'homologue d'une branche locale. La commande échouera si cette branche locale n'existe pas. En outre, même s'il s'agit d'une opération à part entière, « -u » est considérée comme une option de la commande « branch » et qui attend un paramètre. Il faut donc faire immédiatement suivre cette option par le nom de la branche distante. Le reste est considéré comme un paramètre de la commande principale « branch » et correspond à la branche locale que l'on veut manipuler. Ce paramètre est facultatif. À défaut, l'opération s'applique sur la branche courante. Il faut donc écrire au choix :

      git branch --set-upstream-to origin/brserveur brlocal
      git branch --set-upstream-to origin/brserveur
      git branch brlocal --set-upstream-to origin/brserveur


    • « -t » ou « --track », par contre, est une option du mode « création de branche », comme lorsque que tu écris « git branch brlocal » sans option. Cela veut donc déjà dire qu'à l'inverse de la première, cette commande échouera si la branche locale existe déjà.

      Ensuite, lorsque tu crées une branche (locale, donc) tu peux préciser un start point facultatif. Par défaut, la nouvelle branche est créée à l'emplacement courant, c'est-à-dire l'état de HEAD. Mais tu peux si tu le souhaites préciser un emplacement précis. Par exemple git branch brlocal v1.0.0 créera directement la branche « brlocal » à la révision pointée par le tag « v1.0.0 » sans que tu aies besoin de faire un checkout au préalable de cette révision.

      « -t » ou « --track » sert alors à indiquer que cet emplacement doit justement servir d'homologue distant à la nouvelle branche. Et en fait, on parle de « branche amont » plutôt que de branche distante car en réalité, cette branche homologue n'a pas du tout besoin d'être distante. Il peut tout-à-fait s'agit d'une autre branche locale.

      Et justement, il existe en fait « --track » et « --no-track » : si le point de départ précisé (le start point) est local, la création de branche ne fait rien de plus par défaut. Tu peux donc utiliser « --track » ou « -t » pour forcer Git à considérer ce point de départ comme la référence amont de ta branche et pas un simple emplacement. À l'inverse, si le point de départ spécifié est distant, Git considérera que c'est ce que tu veux faire et configurera automatiquement la branche amont. Tu peux donc utiliser « --no-track » pour l'en empêcher.


    Enfin, la man page fait état de la variable de configuration branch.autoSetupMerge pour fixer ce comportement par défaut. Tu peux là encore utiliser ces deux commandes pour adopter un comportement explicite indépendamment de l'état de cette variable.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut
    Merci pour cette explication . j'ai compris une grosse partie

    La commande :

    git branch brlocal -t origin/brserveur

    crée une branche locale brlocal qui suit la branche brserveur du dépôt distant

    Pas de problème jusqu'à ici. Mais, j'ai remarqué dans la suite qu'on peut faire que des pull et pas des push

    par exemple si je travaile sur ma branche brlocal et je souhaite pousser mon travail en tapant*:

    git push origin brserveur

    cela génère une erreur

    error: src refspec brserveur does not match any.
    error: impossible de pousser des références vers url_serveur


    Pourquoi cette erreur et comment y remédier ?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 499
    Par défaut
    Citation Envoyé par developpeurP00 Voir le message
    Merci pour cette explication . j'ai compris une grosse partie

    La commande :
    git branch brlocal -t origin/brserveur

    crée une branche locale brlocal qui suit la branche brserveur du dépôt distant
    Oui.
    Mais pour être tout-à-fait exact, on peut mettre les particularités des deux commandes en évidence avec des couleurs :

    git branch brlocal -u origin/brserveur
    git branch -t brlocal origin/brserveur

    Dans le premier cas, le nom de la branche distante est bien un paramètre de l'option « -u ». Ce nom distant doit donc immédiatement suivre « -u » ou « --set-upstream-to ».

    En revanche, dans le second, « -t » est une option implicite qui se suffit à elle seule et le nom de la branche distante est en fait le deuxième paramètre de la commande branch, servant à dire à quel endroit on souhaite créer la branche locale. L'option « -t », qui reste facultative, sert à dire si on doit en profiter pour définir cet emplacement comme référence amont. C'est pour ça que Git le fait automatiquement si la référence en question est le nom d'une branche distante et jamais dans les autres cas.

    Pas de problème jusqu'à ici. Mais, j'ai remarqué dans la suite qu'on peut faire que des pull et pas des push

    par exemple si je travaile sur ma branche brlocal et je souhaite pousser mon travail en tapant*:

    git push origin brserveur

    cela génère une erreur

    error: src refspec brserveur does not match any.
    error: impossible de pousser des références vers url_serveur


    Pourquoi cette erreur et comment y remédier ?
    Il peut y avoir plusieurs causes (push et pull utilisent des procédures et des canaux distincts) mais d'ores et déjà, la syntaxe de ta commande est incorrecte.

    Si tu veux pousser la branche sur laquelle tu es en train de travailler et pour laquelle une référence amont a déjà été défini, il faut écrire « git push » sans argument. Tu peux aussi utiliser « git push --all » pour pousser toutes les branches d'un coup.

    Sinon, le premier paramètre après « push » est le nom du dépôt cible, ou bien une URL s'il n'a pas encore été ajouté à la liste des dépôts distants connus, et le paramètre suivant est une « refspec » de la forme « +<src>:<dst> » (voir la man page) dans laquelle tu spécifies en une fois la branche locale et la branche distante qui doit être mise à jour (en fast-forward). Si tu ne spécifies qu'un seul nom, Git va chercher une branche locale portant ce nom et mettre à jour la branche distante homonyme. Si cette branche distance n'existe pas, il va la créer. Et dans ton cas, il n'y a pas de branche locale nommée « brserveur ».

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut
    Effectivement, la syntaxe de ma commande était incorrecte.
    Merci pour cette explication professionnelle.
    J'ai mis le sujet en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre character set, collate FR_FR
    Par AlexB59 dans le forum Débuter
    Réponses: 3
    Dernier message: 17/05/2014, 16h13
  2. Différences entre déclarations avec Set et LinkedHashSet
    Par Sinakhine dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 22/10/2012, 00h16
  3. Réponses: 16
    Dernier message: 09/09/2011, 11h58
  4. Différence entre bag/Set
    Par bertrand0756 dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/03/2011, 19h17
  5. Différence entre Snakes et level set
    Par kaiseresis dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/01/2008, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo