如何正确初始化具有非标准布局的存储库的 git-svn 克隆?

How to properly initialize git-svn clone of a repository with nonstandard layout?

我正在尝试使用 git 和具有以下粗略布局的 svn 存储库:

RepositoryHone

  • -> Documents
  • -> ExtraDocuments
  • -> playground
  • -> playground_dev
  • -> playground_balance_change
  • -> Tools

其中 playground 包含主要开发分支 (t运行k),playground_dev、playground_balance_change 和其他未显示的分支。

在分支中,布局如下:

  • -> build
  • -> lib
  • -> bin
  • -> src

我主要想使用 playground 和 playground_dev,所以我有 运行:

git svn init svn::/server.address:port/RepositoryHome -T playground -b playground_dev

git svn fetch

然而,当我 运行 git branch -r 检查分支是如何导入的时,我越来越恐惧地发现,除了 "origin/trunk","branches"例如 "origin/bin"、"origin/lib"、“origin/src”等。

我如何确保本地工作 copy/git 存储库和服务器之间的分支映射正确?

是否可以在不完全提取的情况下解决这个问题,因为这个过程需要很多时间(大约 16 小时)?

对于git svn选项-b并不意味着"this is a branch",它意味着"this is a directory where all subdirectories are branches"所以git svn init -b playground_devplayground_dev的子目录作为分支.

我看不出有什么简单的方法可以解决这个问题。我建议将两次克隆到单独的存储库中并合并这些存储库。类似于:

git svn clone svn::/server.address:port/RepositoryHome -T playground playground
git svn clone svn::/server.address:port/RepositoryHome -T playground_dev playground_dev

cd playground
git fetch ../playground_dev trunk:playground_dev
cd ..
rm -rf playground_dev

最后一个命令从目录 playground_dev 获取分支 "trunk" 到当前目录中的新分支 "playground_dev"。

问题可以分两步解决。

  1. 首先,删除所有错误跟踪的分支。

  2. 向存储库添加正确的分支。

要删除有问题的远程引用,可以使用 git branch -r 找到它们,然后使用 git branch -D.

删除它们

我还没有找到 "proper" 第二步基于命令行的解决方案,但幸运的是 git-svn 文档,更具体地说 Configuration section 提供了足够的细节来手动做事.

最重要的是,不能只设置一个分支来跟踪svn remote;在配置中只识别 "branches" 键,这需要使用通配符替换。

因此,可以只添加另一个 svn 远程 - 手动,在 .git/config 中,复制一个已经存在的,更改远程名称和 "fetch" 键的值。这样就可以设置一个对应于单个远程 svn 分支的分支,然后照常工作。