SVN提交失败,出现“授权失败”错误。

23

我是一个使用SVN的新用户,在SVN提交命令中遇到了问题。

我使用的是TortoiseSVN 1.6.6和带有WMware的Ubuntu Subversion镜像作为服务器。

我已经在SVN服务器上创建了一个存储库,并且可以轻松地从存储库中检出文件,但提交时出现问题。

每次执行提交命令时都会显示问题。

Command: Commit  
Error: Commit failed (details follow):  
Error: Authorization failed  
Finished!:   

这个问题只在使用 SVN 服务器存储库的 VM 上本地客户端中显示。我尝试使用 TortoiseSVN 在本地机器上创建存储库,提交时没有问题。我还尝试了服务器机器上的工作副本,在提交时也没有问题。

有人遇到过这个问题吗?在从 VM SVN 服务器进行 Checkout 时没有任何问题,但是在本地客户端提交到 VM 服务器时出现问题。

是否需要设置我忽略的任何内容?


2
这个问题有点老了,但我会加上我的两分钱,因为我最近遇到了这个问题。我的问题在于我检查存储库的方式。我无意中使用了svn://example.com/Repo而不是svn+ssh://svn@example.com/Repo作为源,匿名检出工作正常,但我无法提交。如果我确保以与其他系统相同的方式检出它,我就不会有问题,但我没有。值得检查一下是否是你的问题:比较工作和非工作之间的存储库源,并查看是否有任何明显的问题。 - Wug
11个回答

20

对我来说,这是由于服务器迁移引起的。 在svnserve.conf文件中,我忘记取消注释:

auth-access = write
password-db = passwd

这是我在使用新仓库时最常见的错误。 - Agguro
这些文件位于每个代码库内。如果有特定用户需要迁移,请重新查看authz和passwd文件。 - dimeros

17

授权失败了。这意味着第一步——认证成功了。

也就是说,用户名/密码正确且已被服务器接受。但是该用户未被允许访问路径/资源。

请检查基于路径的授权文件(conf/authz),确保该用户拥有访问权限。


6
如果服务器使用 svnserve 来服务于仓库(这意味着您正在使用 svn:// URL),那么您应该检查仓库中的文件 conf/svnserve.conf。默认配置允许匿名读取,但只允许已认证的写入访问。

4
我的经验与bluebrother类似,我正确地创建了一个新的仓库,但没有正确设置用户。这使我可以Checkout但无法Commit。
请编辑repoLocation/conf/svnserve.conf文件并取消注释以下行:

password-db = passwd

请编辑repoLocation/conf/passwd文件并添加用户名和密码,例如:

tim = password

注意:请不要删除任何HTML标签。

请注意:用户名和密码应该设置在“repoLocation/conf/passwd”文件中而不是“svnserve.conf”文件中,因为使用上述行代码会告诉服务去查找那个文件。 - Endrik

4
我也曾遇到同样的问题,使用RapidSVN(或从CLI使用svn commit)时出现。问题在于我是使用匿名Subversion访问(svn://链接)检出仓库:
svn checkout svn://svn.r-forge.r-project.org/svnroot/rsitesearch/
但是,当使用这个链接进行提交更改时会失败。所以解决方案是使用svn+ssh://链接,通过SSH允许开发人员Subversion访问:
svn checkout svn+ssh://developername@svn.r-forge.r-project.org/svnroot/rsitesearch/
对于其他SVN服务,提交所需的正确链接可能为https://。实际上,我使用https://的检出效果更好,因此首先尝试这个。
现在,svn commit应该按预期工作。
(这与Wug在OP的评论中提出的解决方案相同。)

如果你只是在本地环境下进行实验,并且想要配置一些能够工作但可能会打开写入权限的东西,也许你可以将svnserve.conf中的一行从 # anon-access = read 改为 anon-access = write(注意是anon-access而不是auth-access)。 - Jon Stafford

3

如果您正在使用 svnserve 提供 SVN 访问(即您的存储库 URL 看起来像 svn://server/repo),请确保您的服务器允许写访问。在某些安装中,服务器默认以只读权限启动:

# The -R option enforces read-only access, i.e. write operations to the
# repository (such as commits) will not be allowed.
SVNSERVE_OPTIONS="-d -R -r /srv/svn/repos"

你为我节省了几个小时的时间!谢谢! - kissgyorgy
那在哪个文件里? - Louis
在你的 svnserve.conf 文件中。参见 http://serverfault.com/a/110663/211562 获取一些关于文件位置的信息。 - user3151902

3
首先,您能否通过Tortoise浏览存储库?如果可以,那么您使用的用户帐户没有编写(=提交)权限。
如果您既无法浏览也无法提交:可能是Tortoise在客户端上存储了错误的身份验证数据。我认为在这种情况下它应该再次要求凭据,但也许它没有。请尝试以下操作:
1.打开“开始”菜单,进入TortoiseSVN组 2.单击“TortoiseSVN设置” 3.转到“保存的数据” 4.在“身份验证数据”中单击“清除”
然后,Tortoise将忘记所有存储的密码,并应在您下次尝试访问VM时再次询问您。

我有一个类似的问题。我在SVN浏览、从SVN仓库检出时没有任何问题。这只发生在我的笔记本电脑上。然而,如果我远程桌面连接到其他机器,我可以检出代码、浏览,并且提交。所以每当我需要检入任何代码时,我都必须将代码复制到远程机器上并进行检查。我使用的是Windows 8 - 64位操作系统。SVN版本信息: TortoiseSVN 1.8.2,Build 24708 - 64位,2013/08/27 19:20:39 Subversion 1.8.3,-release apr 1.4.8 apr-util 1.5.2 serf 1.3.1 OpenSSL 1.0.1e 11 Feb 2013 zlib 1.2.8 - MoG
http://stackoverflow.com/questions/19328149/tortoise-svn-commit-failed-details-below-authorization-failed - MoG

2

尝试使用http协议检查你的文件,而不是svn协议。我曾经遇到过同样的问题,因为我使用svn://协议检出文件。后来我更改了协议为http://,一切都开始正常工作。


0
此外,请仔细检查服务器上实际的存储库是否具有正确的文件权限,以便服务器进程(svnserve或Apache)可以写入。由于您能够以其他方式创建存储库,因此可能没有问题,但最好还是检查一下,以防万一。

0

注意:我使用SASL,但我发现它是区分大小写的,并且期望用户名为小写;例如,“username123”在您的授权文件中不会与“USERNAME123”匹配,尽管它们拼写相同,因此也许要检查一下您的用户名是否为小写(在您的授权文件中)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接