我一直在使用git-svn来感受几年没有任何问题。我的典型工作流程是work, commit, ..., work, commit, rebase, dcommit
突然间,我今天开始收到此错误:
$ git svn rebase
Current branch master is up to date.
$ git svn dcommit
Assertion failed: (svn_uri_is_canonical(child_uri, NULL)), function uri_skip_ancestor, file /SourceCache/subversion/subversion-62/subversion/subversion/libsvn_subr/dirent_uri.c, line 1519.
error: git-svn died of signal 6
以防万一与版本相关:
$ git --version
git version 1.8.3.4 (Apple Git-47)
我确实在git stash中有一个变化,但这在以前从来都不是问题。现在可以吗?
最近发生的另一件事是我们的Unfuddle repo(托管中央SVN仓库)最近用完了空间,我们不得不支付更大的计划;但在增加计划规模后,我能够在星期五下午再次提出这个问题。我想不出有什么改变了。
我确实发现其他一些人在使用dcommit方面存在问题,但没有人发现此特定错误消息。
我该怎么办?
答案 0 :(得分:4)
这与文件名中包含at符号(@)的文件有关(如icon@2x.png
中所示)。
我认为这是一个全局git-svn错误并试图在另一个svn repo上重现它(也是由Unfuddle托管,与第一个相同),但似乎没有任何问题。
以下是为了重现git-svn错误报告的问题而尝试的内容:
(鉴于您已使用git-svn克隆的现有SVN回购)
$ touch icon@2x.png
$ git add icon@2x.png
$ git commit -m"testing"
$ git svn rebase
$ git svn dcommit
这确实不重现了我预期的问题,所以我没有提交错误报告。我可以想到的两个回购之间的唯一区别是,我试图重现问题的那个是使用trunk/
branches/
tags/
的标准svn布局,并用{克隆} {1}}结果,而我遇到问题的原始回购没有使用这种结构。我目前没有备用仓库,没有使用标准结构进行测试,所以现在我正在撑船。
然而,这是我如何解决这个问题:
使用纯SVN客户端,签出repo并在那里提交违规文件/更改。为了在文件名中提交带有@的文件,您必须在文件名后附加另一个@:
git svn clone -s
一旦完成,回到你的git-svn克隆并重新进行rebase,再次尝试dcommit,它应该工作(为我工作!)...