Re: git-svn: Branching clarifications

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Russ Brown <pickscrape@xxxxxxxxx> wrote:
> I have a few questions about how/when to use git branches when using
> git-svn (I'm a tad confused...)
> 
> Say I've initialised and fetched a git repo involving trunk and one
> branch (say branch1) from an svn repository.
> 
> If I do git branch -a, I see similar to the following:
> 
> * master
>   branch1
>   trunk
> 
> (branch1 and trunk are in red for me, which I figure means they're
> remotely tracked or something like that?)

Yes, that seems to be the case (I just enabled color.branch=auto in
.git/config for the first time).

> OK, so that's telling me that I currently have master checked out into
> my working copy. My question is: where did master come from? Is it a
> local branch of trunk?

git-svn sets "master" to the most recently committed-to branch
in SVN the first time it fetches.  "git-log master" will tell
you (look at the git-svn-id: lines).

After you do your initial fetch/clone, it should say something like:

  ----------------------------------------------------------------------
  Checked out HEAD:
    svn://my-repository-here/branches/foo r12345
  ----------------------------------------------------------------------

> Moving on, say I want to work on branch1. Can I simply issue git
> checkout branch1? If I do so I get this:
> 
> $ git branch -a
> * (no branch)
>   master
>   branch1
>   trunk
> 
> Which is a bit scary. It seems my working copy is orphaned...

Yes it is.  Branches under the refs/remotes/ hierarchy were created
back in the day to tell the local user they should not commit to
them directly.

> OK, so let's assume I'm supposed to create a local branch of each remote
> branch I want to work on. So:
> 
> $ git branch local/branch1 branch1
> $ git checkout local/branch1
> 
> $ git-branch -a
> * local/branch1
>   master
>   branch1
>   trunk

That's correct.  You can also use "git checkout -b local/branch1 branch1"
instead of those two commands.

> Am I supposed to have used --track when creating  this branch? What are
> the implications for specifying or not specifying that flag when using
> git-svn?

--track has no effect with git-svn.  dcommit will automatically figure
out which branch it should commit to[1].  Running "git-svn dcommit -n"
with 1.5.3 will tell you which URL you'll commit to.

> So I do some editing on this branch, commit and dcommit. The changes
> appear as expected in the repo.
> 
> At this point if I checkout master, the contents look like
> local/branch1, which isn't what I'd suspected (that it would be a branch
> of trunk). What does master represent?

(see above)

> So I checkout local/trunk, and create a new file, commit and dcommit.
> Umm, it's been committed to branch1 on the repo: not trunk,
> 
> So I figure I'm quite obviously doing something wrong here. Could
> someone give me a hand and tell me what it is I'm getting wrong?

If you run "git-log local/trunk", does the first commit to show
a "git-svn-id: " line have the URL pointing to trunk or branch1?

Again, if you're unsure about where you're committing to,
"git-svn dcommit -n" in 1.5.3 is your friend.

[1] - as long as you don't use git-merge or git-pull.  If you decide to
      do those things, make sure you have Lars's latest patches
      that enables --first-parent.
      Otherwise stick with format-patch/am/cherry-pick/fetch/rebase

-- 
Eric Wong
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux