Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
644 views
in Technique[技术] by (71.8m points)

git svn - Git-SVN with multiple branch locations?

Our company subversion repo is a bit tricky: We've got a basic "default" layout with trunk, tags and branches. However, inside the branches, we have a "work" directory which contains more branches. Something like this:

  • branches/release_1_0_x
  • branches/release_1_1_x
  • branches/work/dave/topic_one
  • branches/work/tom/topic_two
  • branches/work/something_else

Now how can I get git-svn to recognize all those (and a few more) as separate branches? It appears git svn init only accepts one branch location, how ever I'm invoking it.

Edit: this is how I initialized the git repo:

git svn clone  -s --prefix=svn/ http://svn.company.com/product/
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can add multiple branches and tags entries in your git-svn config, even retroactively. So if normally SVN branches live in branches/* in your SVN repo (ie. a standard layout), but you also have branches/summer-students/*, you can set it up in .git/config like below:

[svn-remote "svn"]
    url = svn+ssh://svn.example.com
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

    branches = branches/summer-students/*:refs/remotes/svn-summer-students/*

On the left of the : is the path in the SVN Repo, and on the right is the path it will appear as in your git remote branch list. You can use refs/remotes/* repeatedly to have everything appear as a top-level remote branch, but watch out for name collisions - they will break things (hence svn-summer-students instead of summer-students, which already exists).

After you edit the config, you need to delete .git/svn/.metadata and run git svn fetch to refresh the branch list and regenerate it. git branch -r should then show the extra branches. If you get errors, look out for naming collisions.

The git svn docs have some more examples of specifying paths via wildcards or expressions if you have a funky SVN layout.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...