2011-01-09 197 views
5

我正在努力解决以下问题。当我继续从SVN获取修订与git-svn无法创建一个分支来跟踪SVN分支

git svn fetch 

,我发现了以下错误:

Found possible branch point: https://somecompany.com/product/trunk 
=> https://somecompany.com/product/branches/deep/branches/product-001, 72666 
Found branch parent: (refs/remotes/deep/branches/product-001) b685b7b92813885fdf 6b8e2663daf884bf504b14 
Following parent with do_switch 
Successfully followed parent 
error: 'refs/remotes/deep' exists; cannot create 'refs/remotes/deep/branches/product-001' 
fatal: Cannot lock the ref 'refs/remotes/deep/branches/product-001'. 
update-ref -m r72667 refs/remotes/deep/branches/product-001 df51920e8f0a53f26507 c2679eb6a9dbad91e0d6: command returned error: 128 

这事,因为我是使用SVN分支默认的过滤取修订:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

现在,我已经添加下面的行,但已经太晚了:

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

我试图解决这个问题,通过使用git svn reset来移除所有提交。其实我可以从错误信息中看到git正在尝试正确的事情,但不能因为分支遥控器/深存在而存在。

我试图寻找2个可能的解决方案: 1.删除该分支(遥控器/深),但由于它被git作为遥控器追踪,我无法找到任何解决方案。 2.删除与该分支有关的整个历史记录。没有成功过:(

有谁知道如何处理我的问题

回答

4

我已经终于能够通过执行以下两个步骤来解决该问题:?

  1. 取出参/遥控器/从深填充裁判
  2. git的删除/日志/参/遥控器/深

但仍然有问题与获取。我需要使用

branches = branches/*:refs/remotes/* 

正常分公司和

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

深分支机构。不幸的是,前面的规范包含了后者,所以我得到了错误“致命的:不能锁定ref'refs/remotes/deep'”,因为git-svn试图根据第一个规范创建深度分支。

到目前为止,我通过手动评论第一个“分支”并获取具有深度分支的特定修订,但这不是一个好的选择,因为这两种情况都有太多的修订。

UPD:我发现了其余问题的简单但不优雅的解决方案。我使用分支来指定深度分支的路径并获取指定第一级的每个分支。

+0

关于 1.取出参/遥控器/深盒装-裁判 2.删除git的/日志/参/遥控器/深 可以请你解释如何做到这一点? – ryenus 2011-06-21 14:44:37

+0

rm或del取决于您使用的操作系统 – 2012-01-19 14:49:29

1

我有一个非常类似的问题,发现“git svn reset”,而不是“git reset”修复了它。如果您事先没有更新您的分支配置,一旦您检索到通过分支点的提交,您必须备份以再次检索它们。否则,他们没有父母。

所以,之前更新你的分支,然后运行

git svn reset -r<revisionnum> 

,并按照你的混帐SVN获取正常。这节省了我很多时间从SVN重建整个事情。

在你的情况下,你可能还需要调查“忽略”功能,以不追踪你的嵌入式分支。