How can I change the Prefix Mapping in a Git-Svn Repository?

后端 未结 2 2041
没有蜡笔的小新
没有蜡笔的小新 2021-02-08 12:00

I\'ve created a Git Clone of a SVN repository using git-svn. When doing this I specified the --prefix option to prefix my remote branches. I now want to get rid of

相关标签:
2条回答
  • 2021-02-08 12:32

    I've done the following which appears to have worked.

    In .git/config I updated the fetch, branches and tags settings to update the local refs. It was:

    [svn-remote "svn"]
            url = http://subversion/......
            fetch = trunk:refs/remotes/Project/trunk
            branches = branches/*:refs/remotes/Project/*
            tags = tags/*:refs/remotes/Project/tags/*
    

    Which I changed to

    [svn-remote "svn"]
            url = http://subversion/......
            fetch = trunk:refs/remotes/trunk
            branches = branches/*:refs/remotes/svn/*
            tags = tags/*:refs/remotes/svn/tags/*
    

    The within .git/refs/remotes I moved trunk out of the Project folder and the remaining refs within Project into a new folder called svn. The structure was:

    • remotes
      • Project
        • trunk
        • feature-branch

    Which I changed to:

    • remotes
      • trunk
      • svn
        • feature-branch

    I also performed the same restructuring of folders within .git/svn/refs/remotes/.

    Finally I triggered a git svn fetch. I had to specify the -r argument to limit to the same start revision that I used for my initial clone, but it doesn't appear to have re-fetched the old revisions.

    0 讨论(0)
  • 2021-02-08 12:44

    Note: the current solution might not work anymore with git 2.0+ (April 2014)

    See commit fe191fc by Johan Herland (jherland), which highlight the fact you now are supposed to have a prefix (and not have a svn branch without prefix like 'trunk'):

    Git 2.0: git svn: Set default --prefix='origin/' if --prefix is not given

    Having no prefix by default was problematic:

    git-svn by default puts its Subversion-tracking refs directly in refs/remotes/*.
    This runs counter to Git's convention of using refs/remotes/$remote/* for storing remote-tracking branches.

    Furthermore, combining git-svn with regular git remotes run the risk of clobbering refs under refs/remotes (e.g. if you have a git remote called "tags" with a "v1" branch, it will overlap with the git-svn's tracking branch for the "v1" tag from Subversion.

    0 讨论(0)
提交回复
热议问题