这让我整天都在寻找答案。最重要的是,当我以系统用户身份运行svn时,无论传递什么凭据,它似乎都使用system-name对SVN服务器进行身份验证。以下是得出该结论的长篇解释。
从Windows 7 Professional运行时,如果我在任何普通用户下从控制台运行svn
,则应用程序按预期工作:如果凭据已在%AppData%/Roaming/Subversion
中缓存,则它将使用它们,如果除非我使用--username
和--password
选项,否则它不会提示输入用户名和密码。如果我使用选项输入凭据,则提交可以正常工作。到目前为止一切都很好。
但是,当我尝试在同一台计算机上以系统用户(svn
)身份运行nt authority\system
时,它的行为会有所不同。首先,%AppData%/Roaming/Subversion
指向C:\Windows\System32\config\systemprofile\AppData\Roaming\Subversion
,并确保其中没有auth
文件夹,因此没有缓存凭据。然后我运行svn
没有任何参数,它不会提示用户名/密码,而是执行操作并从subversion接收错误:
svn: E175013: Commit failed (details follow):
svn: E175013: MKACTIVITY of '/svn/Development/!svn/act/f20db493-48f1-9c43-a957-541584be555e': 403 Forbidden (http://<ip-address>)
如果我运行它指示--username
和--password
,则会收到相同的错误。但后来我从subversion检查错误日志并找到:
[Fri Aug 08 17:32:18 2014] [error] [client <client IP>] Access denied: '<clienthostname>$' MKACTIVITY Development:
[Fri Aug 08 17:32:18 2014] [error] [client <client IP>] Access denied: '<clienthostname>$' DELETE Development:
其中<clienthostname>
是我尝试提交的计算机的主机名(注意subversion日志末尾的'$',这不是主机名的一部分,但它确实出现在日志中作为用户名的一部分)。
这就是问题:为什么svn
在以系统用户身份运行时表现不同?为什么在对SVN服务器进行身份验证时使用主机名作为用户名?为什么其他用户正常工作?
注意:我认为我的问题与stackoverflow中的以下问题不同:
--username
和--password
或我不%AppData%/Roaming/Subversion
对于那些想知道我为什么要以系统用户身份运行svn
的人来说,答案是我正在尝试从TeamCity进行提交,这意味着它是构建代理的执行代理{ {1}}命令。 Build Agent是一个Windows服务,以系统用户身份运行,svn
命令以上述方式失败。
答案 0 :(得分:0)
如果您不使用no-auth-cache,它会尝试找出默认的用户名和密码