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

时间:2018-08-31 11:46:00

标签: git svn git-svn

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

  

RepositoryHone

     
      
  • ->文档
  •   
  • -> ExtraDocuments
  •   
  • ->游乐场
  •   
  • -> Playground_dev
  •   
  • -> Playground_balance_change
  •   
  • ->工具
  •   

其中Playground包含主要开发分支(主干),而Playground_dev,playground_balance_change和其他未显示的是分支。

在分支中,布局是这样的:

  
      
  • ->构建
  •   
  • -> lib
  •   
  • -> bin
  •   
  • -> src
  •   

我主要是想和Playground和Playground_dev一起工作,所以我跑了:

  

git svn init svn :: //server.address:port / RepositoryHome -T操场-b操场_dev

     

git svn提取

但是,当我运行git branch -r检查分支的导入方式时,我感到越来越恐惧,发现除了“起源/树干”之外,还有“分支”(例如“起源/ bin”,“ origin / lib”,“ origin / src”等等。

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

由于过程需要大量时间(大约16个小时),是否有可能在不完全获取的情况下解决问题?

2 个答案:

答案 0 :(得分:0)

对于git svn选项-b并不意味着“这是一个分支”,它的意思是“这是所有子目录都是分支的目录”,因此git svn init -b playground_dev接受{{ 1}}作为分支。

我没有克服任何简单的方法。我建议将两次克隆到单独的存储库中并合并这些存储库。像这样:

playground_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 提取分支“ trunk”到当前目录中的新分支“ playground_dev”。

答案 1 :(得分:0)

可以通过两个步骤解决问题。

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

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

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

我还没有找到用于第二步的基于“适当”命令行的解决方案,但是幸运的是git-svn文档,更具体地说Configuration section提供了足够的细节来手动执行操作。

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

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