Différence entre l’extraction de git – origine de la piste / twigment et extraction de git – origine / twig de la twig

Quelqu’un connaît-il la différence entre ces deux commandes pour basculer et suivre une twig distante?

git checkout -b branch origin/branch git checkout --track origin/branch 

Je pense que les deux gardent une trace de la twig distante afin que je puisse pousser mes modifications sur la twig d’origine, non?

Y a-t-il des différences pratiques?

Merci!

Les deux commandes ont le même effet ( grâce à la réponse de Robert Siemer ).

La différence pratique vient quand on utilise une twig locale nommée différemment :

  • git checkout -b mybranch origin/abranch va créer mybranch origin/abranch piste d’ origin/abranch
  • git checkout --track origin/abranch ne créera que ‘ abranch ‘, pas une twig avec un nom différent.

(Autrement dit, comme l’a dit Sebastian Graf , si la twig locale n’existait pas déjà).
Si c’était le cas, vous auriez besoin de git checkout -B abranch origin/abranch )


Tout d’abord, certains éléments d’arrière-plan: Tracking signifie qu’une twig locale a son ensemble en amont sur une twig distante:

 # git config branch..remote origin # git config branch..merge refs/heads/branch 

git checkout -b branch origin/branch

  • créer / réinitialiser la branch au point référencé par origin/branch .
  • créer la twig de branch (avec la git branch ) et suivre l’ origin/branch twig de suivi à distance.

Lorsqu’une twig locale est démarrée à partir d’une twig de suivi à distance, Git configure la twig (en particulier les entrées de configuration branch..remote et branch..merge ) de sorte que git pull soit correctement fusionnée à partir du twig de suivi.
Ce comportement peut être modifié via l’ branch.autosetupmerge configuration global branch.autosetupmerge . Ce paramètre peut être remplacé en utilisant les --track et --track --no-track , et modifié ultérieurement en utilisant git branch --set-upstream-to .


Et git checkout --track origin/branch fera la même chose:

  # or, since 1.7.0 git branch --set-upstream branch upstream/branch # or, since 1.8.0 (October 2012) git branch --set-upstream-to branch upstream/branch # the short version remains the same: git branch -u branch upstream/branch 

Il définirait également l’amont pour « branch ».

(Remarque: git1.8.0 désapprouvera git branch --set-upstream et le remplacera par git branch -u|--set-upstream-to : voir annonce git1.8.0-rc1 )


Avoir une succursale en amont enregistrée pour une succursale locale:

  • Dites à git de montrer la relation entre les deux twigs dans git status et git branch -v .
  • dirige git pull sans arguments pour tirer de l’amont lorsque la nouvelle twig est extraite .

Pour plus d’informations, reportez -vous à la section ” Comment créer une twig git existante pour suivre une twig distante? “.

Il n’y a pas de différence du tout!

1) git checkout -b branch origin/branch

S’il n’y a pas de --track et pas de --no-track , --track est supposé par défaut. La valeur par défaut peut être modifiée avec le paramètre branch.autosetupmerge .

En effet, 1) se comporte comme git checkout -b branch --track origin/branch .

2) git checkout --track origin/branch

“Comme commodité”, --track sans -b implique -b et l’argument de -b est supposé être “branch”. La conjecture est pilotée par la variable de configuration remote.origin.fetch .

En effet, 2) se comporte comme git checkout -b branch --track origin/branch .

Comme vous pouvez le voir: pas de différence.

Mais c’est encore mieux:

3) git checkout branch

est également équivalent à git checkout -b branch --track origin/branch si “branch” n’existe pas encore mais “origin / branch” fait 1 .


Les trois commandes définissent le «amont» de «twig» comme étant «origine / twig» (ou elles échouent).

Upstream est utilisé comme sharepoint référence du git status argument, git push , git merge et donc git pull (si configuré comme ça (ce qui est la valeur par défaut ou presque)).

Par exemple, l’ git status vous indique à quelle distance vous êtes en amont ou en aval, s’il y en a un configuré.

git push est configuré pour pousser la twig actuelle en amont par défaut 2 depuis git 2.0.

1 … et si “origine” est la seule télécommande ayant une “twig”
2 la valeur par défaut (nommée “simple”) impose également aux deux noms de twig d’être égaux

Le livre semble indiquer que ces commandes produisent le même effet:

Le cas simple est l’exemple que vous venez de voir, exécutant git checkout -b [branch] [remotename] / [branch]. Si vous possédez la version 1.6.2 ou ultérieure de Git, vous pouvez également utiliser la forme abrégée –track:

 $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch serverfix from origin. Switched to a new branch 'serverfix' 

Pour configurer une twig locale avec un nom différent de celui de la twig distante, vous pouvez facilement utiliser la première version avec un nom de twig local différent:

 $ git checkout -b sf origin/serverfix 

C’est particulièrement pratique lorsque vos complétions bash ou oh-my-zsh git peuvent extraire le nom d’ origin/serverfix – ajoutez simplement --track (ou -t ) et vous êtes sur votre chemin.