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

时间:2008-08-29 16:43:21

标签: svn version-control

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

例如,以user1:

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

其他选项正常运作:

# $ svn --version --quiet
# 1.3.2

为什么要提示我?
为什么要求user1的密码而不是user2的? 我99%确定我的所有权限都设置正确。 svn是否有一些配置选项可以关闭命令行密码? 或者它完全是另一回事?

我在Fedora Core 5(波尔多)上运行svn 1.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

7 个答案:

答案 0 :(得分:49)

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

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

--non-interactive --no-auth-cache --username XXXX --password YYYY

有关详细信息,请参阅Client Credentials Caching documentation in the svnbook

答案 1 :(得分:29)

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

IIRC您尝试的所有选项仅适用于svn / http / https签出。你能运行svn info来确认你使用的是什么类型的存储库吗?

如果您使用的是ssh,则应设置基于密钥的身份验证,以便您的脚本无需提示输入密码即可运行。

答案 2 :(得分:17)

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

Host server.hostname
  User username

我发现此博文有用:http://www.highlevelbits.com/2007/04/svn-over-ssh-prompts-for-wrong-username.html

答案 3 :(得分:0)

我能给你的最好是SVN 1.5上的“适合我”。您可以尝试将--no-auth-cache添加到svn update,看看是否可以让您更轻松地覆盖。

如果你想永久地从user2切换到user1,请进入〜/ .subversion / auth / on * nix并删除domain.com的auth缓存文件(最有可能在〜/ .subversion / auth / svn.simple中) / - 只需阅读它们,你就会找到你想放弃的那个)。虽然可以更新当前的auth缓存,但您还必须确保更新长度令牌。更简单,只是在下次更新时再次收到提示。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

查看您当地的svn repo并查看目录.svn。 有文件:条目查看它们,你会看到行开头: SVN + SSH://

这是你的第一个配置,由svn checkout'repo_source'或svn co'repo_source'

制作

如果你想改变它,最好的方法是完全刷新这个存储库。 更新/提交您应该保存的工作。然后删除completly目录 最后一步是创建它 svn co / checkout'URI-for-main-repo'[可选的商店本地目录]

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

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

这个话题看起来不像话题。你最好去超级用户页面。

答案 6 :(得分:0)

我有类似的问题,我想为svn + ssh存储库使用不同的用户名。最后,我使用svn relocate(如in this answer中所述。在我的情况下,我使用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可以在URL:命令的svn info行输出中找到。此命令询问我newuser的密码。

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