Subversion忽略“–password”和“–username”选项

当我尝试执行任何svn命令并提供--username和/或--password选项时,它会提示我input密码,并始终尝试使用我的当前用户而不是--username指定的用户。 --no-auth-cache--non-interactive都没有影响。 这是一个问题,因为我试图从脚本调用svn命令,我不能让它显示提示。

例如,以user1身份login:

 # $ svn update --username 'user2' --password 'password' # user1@domain.com's password: 

其他选项正常工作:

 # $ svn --version --quiet # 1.3.2 

为什么提示我?
为什么它要求user1的密码,而不是user2的?
我99%确定我的所有权限都设置正确。 是否有一些configuration选项为svnclosures命令行密码?
还是完全是另一回事?

我在Fedora Core 5(Bordeaux)上运行svn 1.3.2(r19776)。


这是我的环境variables列表(带有敏感信息X'ed)。 他们似乎都不适用于SVN:

 # HOSTNAME=XXXXXX # TERM=xterm # SHELL=/bin/sh # HISTSIZE=1000 # KDE_NO_IPV6=1 # SSH_CLIENT=XXX.XXX.XXX.XXX XXXXX XX # QTDIR=/usr/lib/qt-3.3 # QTINC=/usr/lib/qt-3.3/include # SSH_TTY=/dev/pts/2 # USER=XXXXXX # LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35: # KDEDIR=/usr # MAIL=/var/spool/mail/XXXXXX # PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin # INPUTRC=/etc/inputrc # PWD=/home/users/XXXXXX/my_repository # KDE_IS_PRELINKED=1 # LANG=en_US.UTF-8 # SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass # SHLVL=1 # HOME=/home/users/XXXXXX # LOGNAME=XXXXXX # QTLIB=/usr/lib/qt-3.3/lib # CVS_RSH=ssh # SSH_CONNECTION=69.202.73.122 60998 216.7.19.47 22 # LESSOPEN=|/usr/bin/lesspipe.sh %s # G_BROKEN_FILENAMES=1 # _=/bin/env # OLDPWD=/home/users/XXXXXX 

你得到的提示看起来不像Subversion要求input密码,它看起来像ssh要求input密码。 所以我的猜测是你已经检出了svn + ssh://结帐,而不是svn://或http://或https://结帐。

IIRC你正在尝试的所有选项只能用于svn / http / https检出。 你可以运行svn info来确认你正在使用什么样的仓库?

如果您使用的是ssh,则应该设置基于密钥的身份validation,以便在不提示input密码的情况下使用脚本。

你的命令中是否有单引号? 我不认为他们是必要的。 另外,我认为你也需要--no-auth-cache--non-interactive

这是我使用的(没有单引号)

 - 非交互式--no-auth-cache --username XXXX --password YYYY

请参阅svnbook中的客户端证书caching文档以获取更多信息。

我有这个相同的问题,并通过设置我的〜/ .ssh / config文件明确使用正确的用户名(即用于login到服务器,而不是本地计算机)来解决它。 所以,例如:

主机server.hostname
  用户名称

我发现这个博客文章有帮助: http : //www.highlevelbits.com/2007/04/svn-over-ssh-prompts-for-wrong-username.html

我可以给你的最好的是SVN 1.5上的“适合我”。 你可以尝试在你的svn update添加--no-auth-cache来查看是否允许你更轻松地覆盖。

如果要永久地从user2切换到user1,请进入〜/ .subversion / auth / on * nix并删除domain.com的authcaching文件(很可能在〜/ .subversion / auth / svn.simple /只要通读他们,你会发现一个你想下降)。 尽pipe可以更新当前的authenticationcaching,但您还必须确保更新长度标记。 简单一点就是在下次更新时再次提示。

问题是工作副本通过svn + ssh检出(谢谢Thomas)。 我没有按照build议设置ssh密钥,而是使用svn://domain.com/path/to/repo而不是svn + ssh://domain.com/path/to/repo来检出一个新的工作副本。 因为这个工作副本与存储库本身在同一台机器上,所以我不会错过任何东西,现在我可以无偿地使用–password和–username选项。 现在看来很明显,我想到了。

看看你的本地svn回购,并查看目录.svn。 有文件:条目查看他们,你会看到行开始:svn + ssh://

这是你的第一个configuration由svn checkout'repo_source'或svn co'repo_source'

如果你想改变这个,最好的办法就是彻底刷新这个存储库。 更新/提交你应该保存的工作。 然后删除完整目录,最后一步是通过svn co / checkout'URI-for-main-repo'[可选的本地存储目录]

你应该select连接方法来回购文件:// svn + ssh:// http:// https://或者其他在文档中描述的。

之后,像往常一样使用svn update / commit。

这个话题看起来像是脱离了话题。 最好你去超级用户页面。

我有一个类似的问题,我想用一个不同的用户名svn + ssh仓库。 最后,我使用了svn relocate(就像在这个答案中所描述的那样。在我的例子中,我使用了svn 1.6.11并做了以下操作:

 svn switch --relocate \ svn+ssh://olduser@svnserver/path/to/repo \ svn+ssh://newuser@svnserver/path/to/repo 

svn+ssh://olduser@svnserver/path/to/repo svn info命令的URL:输出中可以findsvn+ssh://olduser@svnserver/path/to/repo 。 这个命令要求我input新用户的密码。

请注意,这个改变是持久的,也就是说,如果你只想用这个方法临时切换到新的用户名,那么在svn update之后,你将不得不再次发出类似的命令。