svn: Can't find a temporary directory 问题解决

本文记录了一次SVN无法提交代码的问题排查过程,最终发现是因为Windows临时文件夹内文件过多导致SVN无法创建临时文件。

今天我机子上的SVN突然没有办法进行代码提交了,出现的错误提示信息为:

Error:Can't find temporary directory:internal error

然后试了下其他的SVN源,发现均无法提交,并且update时也出现上面的错误信息。对比项目文件时出现"不能创建目录或文件"

 

公司网站首页正在改版,突然出现上面的问题,导致代码管理无法使用,此时是十分着急,

赶忙到google上去搜索,发现很多人出现了同样的问题,普遍的问题产生原因是:linux 下盘满,导致svn找不到临时目录存放文件所至.

然后我去装有SVN服务的LINUX机器上查看了一下磁盘空间:df -h

/dev/mapper/VolGroup00-LogVol00
                       18G  6.3G   11G  38% /
/dev/hda6              99M   12M   82M  13% /boot
tmpfs                 248M     0  248M   0% /dev/shm
很显然,磁盘空间还有很多剩余,并非磁盘空间不足导致的。

 

然后继续谷歌,但查找了很久始终没有找到有效的解决方法:

如:查看下 /var/tmp和/tmp的权限是否正确,使用chmod -R 1777 /var/tmp 和 chmod -R 1777 /tmp 修改目录权限。

检测过权限没有问题,并也试用过上面的命令,但均告无效。

 

也试了一些网上谈到的其他方法,不过都没有得到解决,问题依旧。

 

找网上查找无门后,自己开始寻求其他途径,我想可能有以下原因导致问题:

1、端口问题,端口可能被占用。

2、SVN客户端版本问题。

刚开始试了下方法:我把我的SSH服务的端口从2002(早期时期改了2002)改为了22,然后试了下SVN更新,竟然突然好了,可以使用了。

我很高兴,以为是端口问题,可我就是想不明白端口为何会导致这样。 但是,过了10分钟左右,我使用SVN进行提交,又出现了之前的那个错误提示。 这下真是郁闷了。我又试着改了SSH端口号,但这次我怎么改都没用了。 这个方法最终我宣告放弃了。

我开始尝试第二个方法,我检测到自己的客户端版本不是与SVN服务对应的版本,然后我下载了对应的版本,安装,然后重启机器。

然后再SVN提交,但问题依旧。 

 

本想这下拿它没折了,但意外的发现,这次提交失败的错误信息更加详细了,

Error:Can't find temporary directory

Error: C:/Documents and Settings/Administrator/Local Settings/Temp/tmpxxxxx   internal error

提示的"find temporary directory" 这里的临时目录文件指向的路径竟然是客户端机器的目录地址。 这就是关键!

 

我根据提示信息发现C:/Documents and Settings/Administrator/Local Settings/Temp/这个目录是存在的。

但是为何它提示不存在? 暂时想不明白,先不管了。

我发现那个目录下全是临时文件,目录大小有350多M。看着不顺眼,想把里面的文件全清楚了,我Ctrl+a 然后 Shift+Delete,

本以为一下就能全删除了。 结果却是:无响应,试了多次,都是无响应。  仔细一想,明白了,那个目录下的文件太多了,全是1K大小左右的文件,至少3-5万个。  我不知道windows一个目录下有3-5个文件会导致什么结果,但有一定我很清楚,会让机子很慢,常导致"无响应"。我推测有可能是这个目录下临时文件的个数太多了,导致SVN在此目录下创建临时文件失败。  然后我就一小部分一小部分的对目录里的文件进行删除(一次删2-3千个文件响应起来还是很快的),删了20多次,最终清理得只剩几个删不掉的文件了(正在使用的)。然后我再使用SVN的Commit进行文件提交,正如我所料,OK了。再试了其他的SVN命令都一切正常了。

 

这个问题从出现到解决,花了我4个小时左右的时间,今天在此记录,希望能对其他碰到此问题的朋友有一些帮助。

couldn't open specrun result file '/tmp/guest_files/speccpu/result/benchspec/CPU/541.leela_r/run/run_base_train_none.0000/speccmds.out' invalid run: unable to continue. ERROR: Could not create version file in output_root directory '/tmp/guest_files/speccpu/result': Input/output error ERROR: Could not create version file in output_root directory '/tmp/guest_files/speccpu/result': Input/output error ERROR: Could not create version file in output_root directory '/tmp/guest_files/speccpu/result': Input/output error error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_NFys_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_SDSt_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_JEnv_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_xjxY_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_xy49_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_6SOD_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. error removing /tmp/guest_files/speccpu/result/tmp/CPU2017.022.0/in_use_by_33tI_262 at /tmp/guest_files/speccpu/bin/lib/File/Temp.pm line 762. ERROR: Could not create version file in output_root directory '/tmp/guest_files/speccpu/result': Input/output error ERROR: Could not create version file in output_root directory '/tmp/guest_files/speccpu/result': Input/output error the log for this run is in /tmp/guest_files/speccpu/result/CPU2017.022.log the debug log for this run is in /tmp/guest_files/speccpu/result/result/CPU2017.022.log.debug Temporary files were NOT deleted; keeping temporaries such as /tmp/guest_files/speccpu/result/result/CPU2017.022.log.debug (These may be large!) speccpu finished at 2025-12-05 10:42:20; 467 total seconds elapsed [1:32mroot@localhost:/tmp/guest_files# ]
最新发布
12-06
`svn: cannot replace a directory from within` 错误通常出现在尝试执行 `svn switch` 或 `svn update` 操作时,当前工作目录处于某个子目录中,而操作意图替换或更新整个父目录。Subversion 不允许从一个正在被替换的目录内部执行此类操作,因为这可能导致状态不一致或数据丢失[^1]。 ### 解决方法 #### 方法一:切换到父目录的上层目录进行操作 1. 如果你当前位于某个子目录中,并且试图通过 `svn switch` 或 `svn update` 来替换其父目录,请先退出该子目录,切换到父目录的上一级目录。 2. 在此目录下执行操作命令,例如: ```bash svn switch ^/path/to/new/location parent_directory_name ``` #### 方法二:清理并重新检出(checkout)目录 如果上述方法不可行,或者问题依旧存在,可以考虑清理当前的工作副本并重新检出目标路径: 1. 删除本地有问题的目录(确保已经提交或备份了未提交的更改)。 2. 重新检出所需的目标路径: ```bash svn checkout http://your-svn-repo-url/path/to/directory ``` #### 方法三:使用 `--depth` 参数控制更新深度 在某些情况下,可以通过限制更新或切换的深度来避免冲突。例如,使用 `--depth=empty` 先将目录标记为空,再逐步填充内容: ```bash svn update --set-depth=empty path/to/directory svn update --set-depth=infinity path/to/directory ``` #### 方法四:手动解决冲突并标记为已合并 如果错误与文件冲突相关,可以尝试以下步骤: 1. 手动检查冲突文件的状态,使用 `svn status` 查看哪些文件处于冲突状态。 2. 对于每个冲突文件,根据具体情况选择保留哪一部分修改。 3. 使用 `svn resolve --accept=working file_name` 或其他适当的选项标记文件为已解决。 4. 最后,确认所有冲突都已处理完毕,再尝试继续更新或切换操作。 ### 注意事项 - 在执行任何涉及删除或替换的操作前,务必确保本地更改已经妥善保存或提交。 - 如果不确定操作后果,建议先创建工作副本的备份。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值