[Users] Git problem: "git pull" vs. "git pull -a"?
Ian Hinder
ian.hinder at aei.mpg.de
Tue Oct 12 13:39:47 CDT 2010
On 12 Oct 2010, at 19:48, Erik Schnetter wrote:
> I notice that GetComponents uses the command "git pull -a" instead of
> "git pull" to update existing repositories. I also notice that many of
> my git repositories which I updated via GetComponents have spurious
> merge patches in there, apparently automatically committed by myself,
> merging many versions of "master":
>
> commit 2db16f219702be9b9bbdbe3290cd4ec67f514dbd
> Author: Erik Schnetter <schnetter at cct.lsu.edu>
> Date: Tue Sep 14 21:54:25 2010 -0500
>
> Merge branches 'master', 'master', 'master', 'master', 'master'
> and 'master'
>
> Another problem is that the checked out version of my source tree does
> not change. In addition, the additional patches that have been pulled
> in are marked as "undone" in the staging area, so that my next "git
> commit" would create a patch that undoes them.
>
> What does "git pull -a" do? Is that a bad option? I don't understand
> the description of the git-pull man page; it says:
>
> -a, --append
> Append ref names and object names of fetched refs to the
> existing
> contents of .git/FETCH_HEAD. Without this option old data in
> .git/FETCH_HEAD will be overwritten.
>
> Do we need to leave out the "-a" option? Or are my spurious merge
> commits caused by something else? I didn't have any local changes to
> start with.
I don't think the -a is responsible, from the description you give
above. These merge commits happen when you make local commits before
pulling from the remote repository and getting the new commits from
there. This is an unavoidable feature of distributed version
control. It can be avoided by
1. Pushing your commits to the remote repository as soon as you make
them (though this kind of defeats the purpose of distributed version
control).
2. Using "git pull --rebase" instead of "git pull" - this pulls in the
remote commits and rewrites your commits after them all, as if you had
made them after the last commit in the remote repo. This can lead to
conflicts, but they are essentially the same conflicts that you would
have to have resolved in SVN if you had done an "update" with local
uncommitted changes. As always, if you have local changes/commits,
updating frequently is less painful than updating infrequently as the
conflicts will be less each time.
An example of using (2) is the VLC project, where they recommend this
practice (http://wiki.videolan.org/Git#Setting_up_.22git_up.22_.28Tip.
29). The only caveat is that because you are rewriting your own
history, you should make sure that no one else has based a repository
off yours, as things will get confused then.
--
Ian Hinder
ian.hinder at aei.mpg.de
More information about the Users
mailing list