git-svn 重命名跟踪分支

22

我当前使用-s“标准布局”选项克隆的svn分支称为:

$ git branch -r
branch1
branch2

我想将它们重命名,使它们变成:

$ git branch -r
svn/branch1
svn/branch2  

好像我最初调用了 $ git-svn clone --prefix svn。 在远程端上我不需要改变任何名称。

1个回答

35

假设您没有通过 git remote add ... 添加另一个远程仓库,请尝试以下步骤:

  1. 运行 git gc 命令,将所有的引用打包到 .git/packed-refs 文件中。
  2. 打开 .git/packed-refs 文件进行编辑。将 "refs/remotes/" 替换为 "refs/remotes/svn/"。
  3. 打开 .git/config 文件进行编辑。您应该会看到类似于以下内容:

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

    将“refs/remotes/”替换为“refs/remotes/svn/”:

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

    确保还要更新任何远程跟踪分支。你只需在整个文件中用"refs/remotes/"替换为"refs/remotes/svn/"即可。

    我使用我的git-svn GNU Nano存储库的副本测试了此过程,似乎可以正常工作。

    编辑:我刚验证了这个过程不会搞乱git-svn dcommit或rebase操作。就像--prefix=svn/最初在git svn clone -s SVN_REPO_URL命令中规定一样。


谢谢,这很全面! - Gregg Lind
6
我还需要将.git/svn/refs/remotes/trunk移动到.git/svn/refs/remotes/svn/trunk,否则在执行git svn fetch时会出现open: No such file or directory at C:\Program Files (x86)\Git/libexec/git-core\git-svn line 561错误。 - ax.
1
在较新版本的git-svn中,默认前缀为“origin/”,如果在init或clone命令中未指定。我还注意到.git/info/refs中存在对“refs/remotes/origin”的引用。可以推测这些引用也需要重命名为“refs/remotes/svn”? - Patrick Beard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接