3

我已经使用 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 存储库(托管中央 SVN 存储库的地方)最近空间不足,我们不得不为更大的计划付费;但在增加计划规模后,我能够在周五下午做出承诺。我想不出还有什么改变了。

我确实在 SO 上发现其他一些人对 dcommit 有问题,但没有人收到这个特定的错误消息。

我该怎么办?

4

1 回答 1

4

这与文件名中带有 at 符号 (@) 的文件有关(如icon@2x.png)。

我认为这是一个全局 git-svn 错误,并试图在另一个 svn 存储库(也由 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

这没有像我预期的那样重现问题,所以我没有提交错误报告。我能想到的两个存储库之间的唯一区别是,我试图重现问题的那个是使用标准 svn 布局trunk/ branches/ tags/并因此被克隆git svn clone -s,而我遇到问题的原始存储库没有使用这种结构。我目前没有不使用标准结构进行测试的备用回购,所以现在我正在赌注。


但是,这是我解决此问题的方法:

使用纯 SVN 客户端,签出 repo 并在那里提交有问题的文件/更改。为了提交文件名中带有@的文件,您必须在文件名之后附加另一个@:

$ svn ci -m"stupid at-sign" path/to/icon@2x.png@ path/to/icon-small@2x.png@ ...

一旦完成,回到你的 git-svn 克隆并再次变基,再次尝试 dcommit,它应该可以工作(为我工作!)......

于 2014-04-23T15:14:11.400 回答