Re: Terminology question about remote branches.
- From
- Lars Hjemli <hjemli@gmail.com>
- Date
- Aug 4, 2007, 14:03 UTC
- Message-ID
- <8c5c35580708040703w44781498t7396588a3f8c81c8@mail.gmail.com>
- In-Reply-To
- <85k5sbh129.fsf@lola.goethe.zz>
On 8/4/07, David Kastrup <dak@gnu.org> wrote:
Show 21 quoted lines
> "Lars Hjemli" <lh@elementstorage.no> writes: > > > On 8/4/07, David Kastrup <dak@gnu.org> wrote: > >> Now I think that I basically have no chance figuring this out on my > >> own sufficiently well to be able to improve the documentation. > > > > Remote-tracking branch: > > A local copy of a branch in another repository. This kind of branch > > cannot be updated by 'git-commit' but only by 'git-fetch' (hence > > indirectly by 'git-pull' and 'git-remote update'). If you try to > > 'git-checkout' a remote-tracking branch, you will get a detached HEAD. > > > > Local branch: > > A branch to which you may commit changes. Optionally, the branch can be > > configured to "follow" one of your remote-tracking branches. This means > > that a 'git-pull' without arguments (when your local branch is checked > > out), will automatically 'git-fetch' and then 'git-merge' the remote- > > tracking branch. > > Does that mean that specifying "--track" to git-checkout or git-branch > never creates a remote-tracking branch?
Yes. The "--track" option just adds some extra info in .git/config:
[branch "master"] remote = origin merge = refs/heads/master
This info is then used by "git-pull" to 1. fetch updates from the remote repository "origin" 2. merge those updates from refs/remotes/origin/master
Show 8 quoted lines
> > > Example: > > > > Your local branch 'master' is setup to "follow" > > 'refs/remotes/origin/master'. > > So --track/--no-track are actually supposed to be --follow and > --no-follow?
Maybe ;-)
I just tried to avoid using the word "track" in more than one context, since it seemed to be a main source of confusion.
Show 11 quoted lines
> > > So if you do this: > > > > $ git checkout master > > $ git pull > > > > Then the 'git pull'-command will do this: > > > > $ git fetch -f origin master:remotes/origin/master > > This is then tracking?
Yes, this is the part that downloads objects from the remote repository and updates refs/remotes/origin/master to refer to the same commit as the master branch in the remote repository.
> > > $ git merge remotes/origin/master > > And this is then following?
Yes, this updates your local 'master' with the commits downloaded by git-fetch
Show 5 quoted lines
> > > The magic setup that makes this happen is the following lines in .git/config: > > > > [remote "origin"] > Namely: a remote-tracking branch "origin"
No. A remote repository: the name 'origin' can be used as an alias for
git://git.kernel.org/pub/scm/git/git.git
Show 8 quoted lines
> > > url = git://git.kernel.org/pub/scm/git/git.git > > fetch = +refs/heads/*:refs/remotes/origin/* > > > > [branch "master"] > > remote = origin > > Namely: follow the remote tracking branch origin?
No. Fetch objects from the remote repository alias "origin"
> > > merge = refs/heads/master
And this is the info added by "git branch --track" which enables the automatic merging of refs/remotes/origin/master (since refs/remotes/origin/master is your local copy of refs/heads/master in the 'origin' repository)
> > > > > > Was this helpful?
Talking to myself: obviously not
-- larsh