svn: E000013: Commit failed (details follow)问题解决办法

本文介绍了SVN提交过程中遇到的权限错误问题及其解决方法。主要原因是svnserve进程使用了没有足够权限的用户账户启动。文章详细展示了如何通过更换为root用户重新启动svnserve进程来解决问题。

问题描述

最近导师重启了服务器,SVN提交时失败,提示如下:

Committing transaction...
svn: E000013: Commit failed (details follow):
svn: E000013: Can't open file '/home/svn/xxxx/db/txn-current-lock': Permission denied

这说明运行SVN服务的用户没有'home/svn/xxxx/db/txn-current-lock'的写入权限,用下列命令查看svnserver:

ps -fe |grep 'svnserve'
liuyf    10128 10105  0 09:23 pts/3    00:00:00 grep svnserve
admin    27523     1  0 Apr05 ?        00:00:00 svnserve -d -r /home/svn

果然,导师原来是用admin账户启动的svnserver,所以没有权限。

 

解决办法

结束当前svnserver进程,用root账户重启svnserver进程即可:

su root
kill 27523
svnserve -d -r /home/svn

再次检查一下:

ps -fe | grep 'svnserve'
root     10199     1  0 09:26 ?        00:00:00 svnserve -d -r /home/svn
root     10203 10174  0 09:26 pts/3    00:00:00 grep svnserve

退出root账户,svn ci成功!

当使用 Subversion (SVN) 进行提交操作时,如果遇到错误信息 `E160016: Commit failed (details follow)`,这通常表示提交过程中出现了问题,导致无法成功完成提交。此错误信息本身较为模糊,具体的失败原因可能包括权限问题、文件锁定、存储空间不足、版本库损坏等。以下是针对该错误的详细解决方案和排查步骤: ### 1. 检查版本库路径权限 确保用户对目标版本库具有写权限。如果使用的是基于文件系统的版本库(如 FSFS),应检查文件系统权限是否正确设置。如果使用 Apache HTTP Server 提供服务,还需确认 Apache 用户对版本库目录具有写权限[^1]。 ### 2. 执行 `svn cleanup` 命令 有时工作副本中存在未完成的操作(如中断的更新或提交),可能导致提交失败。可以尝试运行以下命令清理工作副本: ```bash svn cleanup ``` 该命令会清除工作副本中被锁定的状态,有助于恢复正常的提交流程[^2]。 ### 3. 检查磁盘空间 确保服务器端和客户端的磁盘空间充足。提交操作需要在服务器端写入新的版本数据,若磁盘空间不足,将导致提交失败。可以通过以下命令检查磁盘使用情况: ```bash df -h ``` ### 4. 检查版本库完整性 如果版本库本身损坏,也可能导致提交失败。可以使用 `svnadmin verify` 命令检查版本库的完整性: ```bash svnadmin verify /path/to/repository ``` 如果发现损坏,可尝试使用 `svnadmin recover` 命令修复版本库: ```bash svnadmin recover /path/to/repository ``` ### 5. 检查文件锁定状态 某些文件可能被其他用户锁定,导致当前用户无法提交更改。可以使用以下命令查看文件锁定状态: ```bash svn status -u ``` 若发现锁定文件,需联系锁定该文件的用户解除锁定,或者使用 `svn unlock` 命令强制解除锁定(需管理员权限): ```bash svn unlock PATH ``` ### 6. 检查网络连接 如果通过网络访问 SVN 服务器(如使用 `svnserve` 或 Apache),需确保网络连接稳定。可以尝试重启 SVN 客户端或服务器端服务,以排除临时网络问题导致的提交失败。 ### 7. 查看详细错误日志 `E160016` 错误通常会伴随更详细的错误信息,建议查看 SVN 客户端和服务器端的日志文件,以获取更具体的错误原因。日志文件通常位于版本库的 `db` 目录下或 Apache 的日志目录中。 ### 8. 更新工作副本 在提交之前,建议先更新工作副本以确保与最新版本同步,避免冲突导致提交失败: ```bash svn update ``` ### 9. 使用 `svn diff` 检查更改内容 提交前可以使用 `svn diff` 命令查看即将提交的更改内容,确保没有意外的修改或冲突: ```bash svn diff ``` ### 10. 检查钩子脚本 如果版本库配置了提交钩子脚本(如 `pre-commit`),这些脚本可能在提交过程中执行失败,导致提交被拒绝。检查钩子脚本的执行权限和逻辑是否正确。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值