git svn show-ignore出现错误“command returned error: 1”

29

我正在尝试将一个项目从SVN迁移到git。这是我使用的命令:

$ git svn clone http://oursvnserver/ --no-metadata -A ../authors-transform.txt --trunk=path/to/trunk --branches=path/to/branches --tags=path/to/tags . --username=mysvnusername --prefix=origin/
当前目录是我想成为存储库的目录。authors-transform.txt肯定在正确的位置。该项目使用标准布局,但它不存在于存储库的根目录下。(不幸的是,很久以前有人开始将所有项目都塞进同一个存储库。这就是我指定--trunk--branches--tags的原因。)它似乎检出没问题。然后我尝试生成一个忽略文件并得到了这个极其难懂的错误:
$ git svn show-ignore
config --get svn-remote.svn.fetch :refs/remotes/git-svn$: command returned error: 1

看起来它正在执行一些其他的命令,因此我进行了一些猜测:

$ git config --get svn-remote.svn.fetch :refs/remotes/git-svn || echo $?
1
$ git config --get svn-remote.svn.fetch :refs/remotes/git-svn$ || echo $?
1

所以也许我猜对了它调用的命令?但这并没有真正帮助。

这个错误实际上意味着什么?我该尝试什么来解决它?

使用 msysgit 1.9.4。

1个回答

41

因为 Git 无法在 $GIT_DIR/config 文件的 svn-remote 部分中找到匹配的 fetch 条目,导致出现这个问题。如果没有给出 git svn show-ignore 的参数,它就不知道在该部分中要查找什么。(也许我的跟踪设置不正确?)

为了解决这个问题,您需要首先指定要查看的远程库:

git svn show-ignore --id=origin/trunk

(请注意,在克隆时我指定了“origin”前缀。根据需要调整您的命令。)

其次,这对于我的分支仍然失败,并出现非常类似的错误。对于主干,它表现良好,但对于分支则不是这样。这是因为没有分支的fetch条目。要添加它们,请使用此命令(需要调整前缀):

git config --add svn-remote.svn.fetch path/to/branches/branchname:refs/remotes/origin/branchname

查看所有fetch条目,确保它已经起作用:

git config --get-all svn-remote.svn.fetch

我不确定为什么一开始只设置了主干的条目;也许我在克隆时做错了什么。


2
如果你还记得这件事(我知道那是三年前的事了),@jpmc26,当你说在执行克隆时指定了“origin”时,你到底是什么意思?我通过添加--id=origin/trunk部分使其工作,但我在我的克隆中没有指定任何类似的内容... - Svend Hansen
1
@SvendHansen 在问题中看一下 --prefix 参数。;) 如果你没有指定它,origin/ 可能是默认值;我不确定。但如果你指定了其他的东西,那么显然你需要调整命令来适应它。 - jpmc26
好的。哎呀!我应该在那里看一下。我猜没有指定它就默认为“origin”,这就是为什么它对我起作用了 :) - Svend Hansen
2
对于仍然有疑问的人:我刚刚克隆了一个SVN存储库(标准布局),没有使用--prefix = origin,但是对于show-ignore,我确实需要指定origin/trunk。如果没有“origin /”,我将得到与以前相同的错误。 - Zilk

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