我正在尝试修复 git-svn 中的间歇性错误.问题仅发生在 Windows XP 中,同时使用 Cygwin git (perl v5.10.1) 和 msysGit (perl v5.8.8)。
对于任何涉及获取的操作,我都能够中途完成,然后操作终止并显示类似于
的消息Couldn't open .git/svn/refs/remotes/trunk/.rev_map.cc05479a-e8ea-436f-8d71-e07493b7796c.lock: Device or resource busy
at /usr/lib/git-core/git-svn line 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 开发人员宁愿找出根本原因,也不愿采用碰巧有效的 hack(我认为这是正确的方法)。那么,谁能帮我找到拒绝我打开这些 .lock 文件的权限的罪魁祸首?我有许多理论上可用于此目的的工具,但它们并没有完全适用:
- Process Explorer - 显示进程拥有的所有句柄,还可以搜索拥有给定句柄的所有进程。但是,它不适用于短暂的进程或句柄(这是 git svn clone/fetch 所做的)
- Unlocker - 检测何时出现通用的“权限被拒绝”对话框并找到有问题的句柄并提出处理它们。但是,当非资源管理器程序遇到基于文件的错误时,它不会出现
简而言之,如果我不是 Microsoft 员工,有什么方法可以获取更多信息?
编辑 2:它可能不是赛门铁克,而是我们在联网计算机上运行的另一个程序。我有一些人在调查它,他们至少应该能够缩小这里的原因。
最佳答案
这种行为通常可归因于防病毒组件保持文件打开并延迟删除。
关于windows - sysopen 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832398/