git-svn dcommit 错误:无法确定上游 SVN 信息

9

我正在尝试使用git-svn,但是遇到了以下错误。目前为止我已经做的是:

 git svn init -T <my svn repo> 

我一直在使用以下命令向我的代码库提交更改:

 git commit -a

然后当我完成了其中几个之后,我进行了一些操作

 git svn fetch

然后我尝试了一个

 git svn dcommit

然而,这种方法无法成功,因为:

无法从HEAD历史记录中确定上游SVN信息。可能存储库为空。

我还发现我的文件系统中的文件没有标记为svn使用(不确定是否应该这样)。但是,如果我使用repo浏览器浏览svn仓库,我可以看到原始文件在那里。
在这个初始失败之后,我尝试了重新定位,但没有取得太大的成功(它会抛出一些其他错误)。

我猜这可能与 SVN 仓库一开始为空有关。不确定这是否是 git-svn 的限制。 - usr1234567
5个回答

3
我发现,当SVN代码库为空时,git-svn会抛出以下错误信息:

无法从HEAD历史记录中确定上游SVN信息

因此,我使用SVN将一个文本文件作为第一个提交进行了检入。
svn add test.txt; svn commit -m "test file"

然后我可以执行 git svn clone 命令,这解决了所有问题。

2
这个网站为我解决了问题:http://eikke.com/importing-a-git-tree-into-a-subversion-repository/。直接引用该网站的话:
问题是SVN元数据丢失了。要解决这个问题,我们可以使用Git嫁接来连接它们。我们告诉Git创建SVN文件夹的提交是我们想要存储项目的第一个提交的父提交:
$ git show-ref trunk 
> 741ab63aea786882eafd38dc74369e651f554c9c refs/remotes/trunk 
$ $ git log --pretty=oneline master | tail -n1
> 88464cfdf549a82b30ee7c52e53e2b310f0d9ec4 Initial version  
$ echo "88464cfdf549a82b30ee7c52e53e2b310f0d9ec4 741ab63aea786882eafd38dc74369e651f554c9c" >> .git/info/grafts`

2
这段文本的意思是:
这是一个一般性的git-svn限制吗?还是存在键盘和椅子之间的问题?
该错误消息是由git 1.5.1(2007年2月)引入的,commit a8ae262
因此,为了使您的分支的dcommit正常工作,git需要找到包含SVN URL的提交。
如果您选择在执行git svn clone之前创建的分支,则可能会出现这种情况。您需要使用在通过git svn clone导入的分支之上创建的分支。

2
换句话说:Git-svn 无法处理空的 Subversion 仓库。 - usr1234567
1
@usr1234567 确实,看起来是这样的。 - VonC

1

git svn 命令与处理普通远程库类似(svn 远程库的名称为 git-svn)。fetch 只是从远程下载提交,不会以任何方式将其连接到您的树中。如果您在初始化后立即获取,则可以正常工作,因为您还没有树,但是您首先提交了。您需要使用 git svn rebase,它将使您的树基于 svn head 进行变基。通常情况下,您会在 git svn init 后立即执行 git svn fetch,或者只需使用 git svn clone,它会同时执行两个操作。一旦设置了初始存储库,您就可以始终使用 git svn rebase,它会在一次操作中获取和变基。


2
嗨,Michael。感谢您的解释。我不知道在开始提交到Git存储库之前需要变基。我尝试了git svn rebase(正如我在我的帖子中所说),但它会抛出“无法从工作树字典确定上游SVN信息”的错误。 - roundcrisis
@Miau 我不确定如何修复你现有的代码库;你可能需要创建一个新的,并在提交任何内容之前正确设置svn远程。 - Michael Mrozek
你可以尝试将你的提交保存为补丁,然后执行 git reset --hard 命令。接着执行 git svn fetchgit svn rebase 命令来获取上游更新。最后应用你的补丁并提交。这可能有效。 - yasouser

0

只是猜测,可以尝试使用git svn clone命令,然后更改/提交文件,最后使用git svn dcommit命令。这是我通常的做法,对我来说很有效。


这个也适用于一个还没有任何提交的 SVN 仓库吗? - usr1234567

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接