How to use git-svn to checkout only trunk and not branches and tags?

后端 未结 3 1674
感情败类
感情败类 2020-12-24 11:18

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:



        
相关标签:
3条回答
  • 2020-12-24 11:34

    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
    
    0 讨论(0)
  • 2020-12-24 11:37

    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.

    0 讨论(0)
  • 2020-12-24 11:54

    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.
    0 讨论(0)
提交回复
热议问题