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?
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.
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
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.