windows - sysopen 权限被拒绝

标签 windows perl git git-svn timing

我正在尝试修复 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/

相关文章:

windows - 从Docker容器访问Windows文件共享(域)内的伪像

javascript - Cypress - 执行时出错 'cypress open'

web-services - 使用 wsdl 的 Perl Soap 服务

git - git rebase 是否比 git merge 产生更多的冲突?

c++ - 为什么在 VCC 2003 中编译需要这么长时间?

windows - 在 token 分隔符批处理文件中使用百分号

perl - Perl 的 OLE 自动化基础知识

perl - 使用 for/foreach 访问数组引用数组的正确语法是什么

git - 是否可以使现有的 git 提交显示为 merge ?

git - 我如何 'overwrite' 而不是 'merge' 是 Git 中另一个分支上的一个分支?