我试图修复git-svn中的间歇性错误。这个问题只发生在Windows XP中,Cygwin git(perl v5.10.1)和msysGit(perl v5.8.8)。sysopen权限被拒绝
随着涉及取回,我能够通过获得中途然后操作类似于
无法打开的.git/SVN /参/遥控器/主干消息去世的任何操作/.rev_map.cc05479a-e8ea-436f-8d71-e07493b7796c.lock:设备或资源忙
在/ usr/lib中/ git的核/ GIT中 - svn的线5240
然而,确切的锁文件和行号并不总是相同的。我已经跟踪到实际问题行3679
sysopen(my $fh, $db_lock, O_RDWR | O_CREAT)
这是创建一个新的.lock文件,我试过相当于无济于事。
open(my $fh, ">", $db_lock)
我检查了目录的权限,这是drwxr-XR-X,所以不应该有任何问题,或者如果他们成功了,他们就不会那么抵触。
难道这是因为脚本创建并重命名这个文件很多次快速连续,XP无法处理它?编辑:我怀疑是这种情况,因为当我使用perl调试器并手动启动每个sysopen的执行时,我获取的100个修订版本没有问题。
编辑:一些Git开发人员宁愿找出根本原因,而不愿意使用正常工作的黑客(我认为是正确的方法)。那么,谁能帮我找到否认我打开这些.lock文件的罪魁祸首?我有一些是理论上可以用于此目的的工具,但他们不太一路走:
- 进程资源管理器 - 显示一个进程所拥有的所有手柄,并且还可以搜索所有进程拥有一个给定的句柄。然而,它不适用于短期流程或句柄(这是git svn clone/fetch的作用)
- Unlocker - 检测何时出现通用“权限被拒绝”对话框并找到违规句柄和优惠来处理它们。但是,当非资源管理器程序遇到基于文件的错误时,它不会出现
简而言之,有没有什么方法可以在不成为Microsoft员工的情况下获得更多信息?
编辑2:这可能不是赛门铁克,而是我们在联网的计算机上运行的另一个程序。我有一些人正在研究它,他们应该至少能够在这里缩小事业的范围。
这听起来似乎合理。 – Axeman 2010-09-30 16:06:15
那么,如果添加一个循环来重试某个特定的次数,或者这样做太过分了,那么这会是一个很好的解决方案吗? – 2010-09-30 16:49:19
不等于'O_RDWR | O_CREAT'打开(我的$ fh,“+ <”,$ db_lock)'? – mob 2010-09-30 17:30:39