【问题标题】:Subversion ignoring "--password" and "--username" optionsSubversion 忽略“--password”和“--username”选项
【发布时间】:2008-08-29 16:43:21
【问题描述】:

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

例如,以 user1 身份登录:

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

其他选项正常工作:

# $ svn --version --quiet
# 1.3.2

为什么会提示我?
为什么它要求输入用户 1 的密码而不是用户 2 的密码?
我 99% 确定我的所有权限都设置正确。 svn 是否有一些配置选项可以关闭命令行密码?
还是完全是另外一回事?

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


这是我的环境变量列表(敏感信息已删除)。它们似乎都不适用于 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

【问题讨论】:

  • 我不知道 *nix shells - 但你真的在那里使用单引号吗?它们不应该是双引号吗?
  • 您的 $HOME/.subversion 中可能有任何自定义配置吗?

标签: svn version-control


【解决方案1】:

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

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

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

请参阅Client Credentials Caching documentation in the svnbook 了解更多信息。

【讨论】:

    【解决方案2】:

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

    IIRC 您尝试的所有选项仅适用于 svn/http/https 结帐。您可以运行 svn info 来确认您使用的是哪种存储库吗?

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

    【讨论】:

      【解决方案3】:

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

      主机服务器.主机名 用户名

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

      【讨论】:

      • 是的 - 发布的链接是解决此问题的超级简单方法。谢谢!
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          查看本地 svn 存储库并查看目录 .svn 。 有 file: 条目查看它们,您会看到以下行开头: svn+ssh://

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

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

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

          之后你照常使用 svn update/commit。

          这个话题好像跑题了。最好去超级用户页面。

          【讨论】:

            【解决方案7】:

            我遇到了类似的问题,我想为 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 可以在svn info 命令的URL: 行输出中找到。该命令要求我输入newuser 的密码。

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

            【讨论】:

              猜你喜欢
              • 2020-12-21
              • 2011-09-02
              • 1970-01-01
              • 1970-01-01
              • 2019-06-23
              • 2021-04-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多