Svn “颠覆忽略”--密码";及--用户名";选择权

Svn “颠覆忽略”--密码";及--用户名";选择权,svn,version-control,Svn,Version Control,当我尝试执行任何svn命令并提供--username和/或--password选项时,它会提示我输入密码,并始终尝试使用我的当前用户,而不是--username指定的用户。--无身份验证缓存或--非交互式都不会对此产生任何影响。这是一个问题,因为我试图从脚本调用svn命令,但无法让它显示提示 例如,以user1身份登录: # $ svn update --username 'user2' --password 'password' # user1@domain.com's password:

当我尝试执行任何svn命令并提供
--username
和/或
--password
选项时,它会提示我输入密码,并始终尝试使用我的当前用户,而不是
--username
指定的用户。
--无身份验证缓存
--非交互式
都不会对此产生任何影响。这是一个问题,因为我试图从脚本调用svn命令,但无法让它显示提示

例如,以user1身份登录:

# $ svn update --username 'user2' --password 'password'
# user1@domain.com's password: 
其他选项正常工作:

# $ svn --version --quiet
# 1.3.2
为什么会提示我?
为什么它要求用户1的密码而不是用户2的密码?
我99%确定我的所有权限都设置正确。svn是否有关闭命令行密码的配置选项?
还是完全是别的原因

我正在FedoraCore5(波尔多)上运行SVN1.3.2(r19776)


下面是我的环境变量列表(敏感信息用X’标出)。它们似乎都不适用于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
我能给你的最好的答案是SVN1.5上的“为我工作”。您可以尝试将
--no auth cache
添加到
svn更新中,以查看这是否使您更容易覆盖


如果您想从user2永久切换到user1,请进入~/.subversion/auth/on*nix并删除domain.com的auth缓存文件(最有可能在~/.subversion/auth/svn.simple/--只需通读它们,您就会找到要删除的文件)。虽然可以更新当前的身份验证缓存,但也必须确保更新长度标记。更简单的方法是在下次更新时再次得到提示。

您的命令中是否有单引号?我认为没有必要。另外,我认为您还需要
--无身份验证缓存
--非交互式

以下是我使用的内容(没有单引号)

--非交互式--无身份验证缓存--用户名XXXX--密码YYYY
有关更多信息,请参阅。

您收到的提示看起来不像Subversion要求您输入密码,而是ssh要求输入密码。所以我猜您已经签出了svn+ssh://签出,而不是svn://或http://或https://签出

IIRC您尝试的所有选项仅适用于svn/http/https签出。您能否运行svn info来确认您正在使用哪种类型的存储库


如果您使用的是ssh,您应该设置基于密钥的身份验证,这样您的脚本就可以在不提示输入密码的情况下工作。

问题在于工作副本是通过svn+ssh签出的(谢谢,Thomas)。我没有按照建议设置ssh密钥,而是使用svn://domain.com/path/to/repo 而不是svn+ssh://domain.com/path/to/repo. 因为这个工作副本与存储库本身在同一台机器上,所以我没有遗漏任何东西,现在我可以免费使用--password和--username选项。现在我想起来似乎很明显。

我也遇到了同样的问题,通过设置~/.ssh/config文件以显式使用正确的用户名(即用于登录服务器而不是本地计算机的用户名)解决了这个问题。例如:

Host server.hostname User username 主机名 用户用户名
我发现这篇博文很有帮助:

查看您当地的svn repo和directory.svn。 这里有一个文件:查看条目,您将看到以以下开头的行: svn+ssh://

这是svn签出“repo_source”或svn co“repo_source”生成的第一个配置

如果您想改变这一点,最好的方法是完全刷新此存储库。 更新/提交保存工作所需的内容。然后完全删除目录 最后一步是通过 svn co/签出“主回购的URI”[可选存储的本地目录]

您应该选择到repo file://svn+ssh://http://https://或其他的连接方法 在文档中描述

之后,您将像往常一样使用svn更新/提交


这个主题看起来好像离题了。最好转到超级用户页面。

我有一个类似的问题,我想为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@可以在
svn info
命令的
URL:
行输出中找到svnserver/path/to/repo
。该命令要求我输入
newuser
的密码


请注意,此更改是持久性的,即如果您只想使用此方法临时切换到新用户名,则必须在
svn update
等之后再次发出类似的命令。

是-发布的链接是解决此问题的一种非常简单的方法。谢谢!我不知道*nix shell-但您实际使用的是单引号吗ere?它们不应该是双引号吗?$HOME/.subversion中是否有自定义配置?
svn switch --relocate \
    svn+ssh://olduser@svnserver/path/to/repo \
    svn+ssh://newuser@svnserver/path/to/repo