我有一个来自上游SVN存储库的git svn clone
创建的git存储库。存储库是在不久前(1年或2年)创建和配置的。拉(git svn fetch
/ git svn rebase
)和推(git svn dcommit
)之前工作正常。我停止使用存储库几个月,现在使用以下任何命令失败:
Value is not a string (or undef) at /usr/share/perl5/vendor_perl/Git/SVN/Ra.pm line 96
所以我无法使用git-svn。我怎样才能让它再次运作?
我正在运行Arch Linux,所以很可能有Subversion或Git的更新,不知何故破坏了我的设置。但是,在搜索错误消息时,我没有找到任何相关内容。 有问题的perl行在我当前的git版本中看起来像这样(因为第96行可能在其他版本中有所不同):
SVN::_Core::svn_auth_set_parameter($baton,
$SVN::_Core::SVN_AUTH_PARAM_DONT_STORE_PASSWORDS,
bless (\$dont_store_passwords, "_p_void"));
我目前正在使用subversion 1.9.2和git 2.6.1
编辑:在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=797705
中跟踪了同样的问题答案 0 :(得分:1)
Git 2.7.1应该很快(2016年2月)解决这个问题。
commit 0b66415见Eric Wong (ele828
)(2016年1月16日)
(由Junio C Hamano -- gitster
--合并于commit 6d579a0,2016年2月1日)
git-svn
:在SVN 1.9.0 + auth
参数处理
对于使用"
store-passwords = no
"设置在"[auth]
"尝试呼叫~/.subversion/config
时,他们svn_auth_set_parameter
,SVN 1.9.0+的部分会失败并显示以下消息:
Value is not a string (or undef) at Git/SVN/Ra.pm
具有讽刺意味的是,这次破坏是由颠覆中的r1553823引起的:
"使
svn_auth_set_parameter()
可用于Perl绑定。"自2007年以来(602015e),
git-svn
使用了一种解决方法,使svn_auth_set_parameter
在内部可用。
但是,这种解决方法在SVN 1.9+下中断,它正确处理类型映射并且无法识别我们的解决方法。对于1.9.0之前的SVN,我们继续使用现有的解决方法,因为绑定中缺少正确的类型映射。
在subversion 1.6.17和1.9.3下测试。
我还验证了r1553823没有向后移植到SVN 1.8.x:
BRANCH=http://svn.apache.org/repos/asf/subversion/branches/1.8.x
svn log -v $BRANCH/subversion/bindings/swig/core.i
答案 1 :(得分:0)
我仍然不确定需要更改哪个软件(如果有的话),但是使用perl代码我可以查明我的配置问题。
防止subversion存储~/.subversion/config
中的密码:
[auth]
store-passwords = no
评论该行(# store-passwords = no
)使git svn
再次发挥作用。
从subversion 1.6开始,在文件config
中指定此设置为deprecated(但已成功)。
然而,颠覆1.9.x(可能从1.9开始)似乎完全删除了这个选项(我无法找到1.9文档,http://svnbook.red-bean.com仍然具有1.8作为"夜间")。这并没有打破颠覆,但它确实打破了git svn
。
从Subversion 1.6开始,此选项可以在~/.subversion/servers
中给出:
[global]
store-passwords = no
这可能是由git-svn触发的subversion perl文件中的错误。但是,我在perl上做得不够流利,无法对此做出错误报告。另外,我的配置是错误的(对于颠覆1.9),如果它没有以某种方式中断,我也不会发现它。可能会好好打破一个更好的"虽然如此。
编辑: 现在有一个git-svn的补丁可用于 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=797705;msg=15