Git pullfetch with refspec differences

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

Using refspec is a convenient way to grab a remote branch and create a similar one but with given name (or the other way round: create a remote one with a given name different from the local one). I m puzzled about one tiny thing - as pull will also do the merge with current branch I would expect different behavior from:

git fetch origin master:mymaster

and from

git pull origin master:mymaster
  Both of the above commands seem to produce exactly same result    - that is a local branch called mymaster, same as origin/master. Am I right or is there a vague difference between the two?

Finally, using a refspec will create a local branch not a tracking branch, right? Since tracking branches are pushed automagically when one invokes git push without any arguments AFAIK

Answers

A refspec is just a source/destination pair. Using a refspec x:y with fetch tells git to make a branch in this repo named "y" that is a copy of the branch named "x" in the remote repo. Nothing else.

With pull, git throws a merge on top. First, a fetch is done using the given refspec, and then the destination branch is merged into the current branch. If that s confusing, here s a step-by-step:

git pull origin master:mymaster
    • Go to origin and get branch "master"
    • Make a copy of it locally named "mymaster"
    • Merge "mymaster" into the current branch

Fully qualified, that would be refs/heads/mymaster and refs/heads/master. For comparison, the default refspec set up by git on a clone is +refs/heads/*:refs/remotes/origin/*. refs/remotes makes a convenient namespace for keeping remote branches separate from local ones. What you re doing is telling git to put a remote-tracking branch in the same namespace as your local branches.

As for "tracking branches", that s just an entry in your config file telling git where to pull and push a local branch to/from by default.

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/7169103/git-pull-fetch-with-refspec-differences

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils