How to use git-svn to checkout only trunk and not

2020-02-18 03:38发布

问题:

I'm working on a Java legacy project which has 20 modules connected to each other. So, each module has it's own branch and tag. The structure is like this:


/projects
   .svn
   - module1
       .svn
       -trunk
       -branch
       -tag
   - module2
       .svn
       -trunk
       -branch
       -tag

The projects folder is around 30 GB which is nearly impossible to use git-svn clone to checkout all the modules, but it's because it counts all the branches and tags.

Is it possible to just clone the project only trunk so I can start committing locally?

回答1:

Edit: I misread the question and answered what I thought you were asking, not what you actually asked.

To clone just the trunk

Cloning a single Subversion directory is easy, and it actually doesn't matter which directory you clone. Just don't specify any of the "layout" arguments, and give the path to the trunk directly:

git svn clone http://path.to.svn.repo/module1/trunk

To clone a specific module, including tags and branches and so forth

A "normal" git svn clone would look something like the following:

git svn clone --stdlayout http://path.to.svn.repo/

What you want to use instead will be thus:

git svn clone --stdlayout http://path.to.svn.repo/module1/

That will find the trunk, branch and tag subfolders of the module1 folder, and clone them for you.



回答2:

I have found git svn clone with --stdlayout didn't do quite the right thing for me.

In the same situation this strategy worked well:

git svn init --trunk $repo/projects/module1/trunk --tags $repo/projects/module1/tag --branches $repo/projects/module1/branch
git svn fetch


回答3:

I just wanted to add more information based on @me_and's answer.

the command given to clone just trunk is gonna work but in the git folder the structure created was:

refs
 |--remotes
    |--git-svn

which is equivalent of refs/remotes/git-svn.

if we do this instead:

git svn clone https://domain/svn/repo/trunk --no-metadata --authors-file=authors.txt --trunk=https://domain/svn/repo/trunk

then the structure created is:

refs
 |--remotes
    |--origin
       |--trunk

which is equivalent to refs/remotes/origin/trunk

The second structure looks more git-friendly and potentially could reduce the commands and shell scripts you have to write :)

P.S. the [--no-metadata] and [--author-file] arguments are optional.

  • metadata option disables git to append svn information after commit message.
  • authors-file option allows you to map your svn contributors to git contributors so your svn historical revisions won't be messed up in git.


标签: git svn git-svn