2008-08-29 47 views
45

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

例如,登录的用户1:

# $ svn update --username 'user2' --password 'password' 
# [email protected]'s password: 

其他选项正常工作:

# $ svn --version --quiet 
# 1.3.2 

为什么它提示我?
为什么它要求user1的密码,而不是user2的?
我99%确定我的所有权限都设置正确。是否有一些关闭命令行密码的配置选项?
还是完全是其他的东西?

我在Fedora Core 5(波尔多)上运行svn 1.3.2(r19776)。


下面是我的环境变量(包含敏感信息X'ed out)的列表。它们似乎都不适用于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 
+0

我不知道* nix中贝壳 - 但你真的在那里使用单引号?他们不应该是双引号吗? – 2008-08-29 18:38:56

+0

您的$ HOME/.subversion中的任何自定义配置可能? – Joril 2008-08-29 19:33:05

回答

29

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

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

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

0

我可以给你的最好的东西是SVN 1.5上的“适用于我”。您可以尝试将--no-auth-cache添加到svn update以查看是否允许您更轻松地进行覆盖。

如果要永久从user2切换到user1,请进入〜/ .subversion/auth/on * nix并删除domain.com的auth缓存文件(很可能在〜/ .subversion/auth/svn中。简单/ - 只需通读他们,你会发现你想要放弃的那个)。尽管可以更新当前的认证缓存,但您还必须确保更新长度令牌。更简单一点就是在您下次更新时再次提示。

41

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

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

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

更多信息,请参见Client Credentials Caching documentation in the svnbook

+3

这一个为我工作..感谢很多 – Anuragh27crony 2014-12-08 19:42:43

0

问题是工作副本通过svn + ssh检出(谢谢Thomas)。相反,如建议建立SSH密钥的,我只是检查出使用SVN一个新的工作副本://domain.com/path/to/repo而不是SVN + SSH://domain.com/path/to/repo。因为这个工作副本与存储库本身位于同一台机器上,所以我不会错过任何东西,现在我可以无偿地使用--password和--username选项。现在看起来很明显,我想到了它。

0

查找到本地的svn回购,看看目录的.svn。 有文件:条目看看他们,你会看到行开头: SVN + SSH://

这是你第一次配置的svn签“repo_source”或svn maked合作“repo_source”

如果你想改变这个,最好的方法是完全刷新这个存储库。 更新/提交你应该保存的工作。然后取出完全地目录 和最后一个步骤是通过 SVN CO /结帐“URI换主回购” [店面任选本地目录]

应该选择连接方法回购文件创建此:// SVN + ssh:// http:// https://或文档中描述的其他 。

之后,你使用svn更新/提交如常。

这个话题貌似出来的话题。最好转到超级用户页面。

0

我有一个类似的问题,我想用不同的用户名了SVN + SSH库。最后,我用svn relocate(如在in this answer描述以我的情况下,我使用的svn 1.6.11和做了以下:

svn switch --relocate \ 
    svn+ssh://[email protected]/path/to/repo \ 
    svn+ssh://[email protected]/path/to/repo 

其中svn+ssh://[email protected]/path/to/repo可以svn info命令的URL:线输出中找到。这个命令要求我输入密码newuser

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