我正在尝试修复git-svn中的间歇性错误。问题仅在Windows XP上出现,使用Cygwin git(perl v5.10.1)和msysGit(perl v5.8.8)均有此问题。
对于任何涉及提取的操作,我可以完成部分操作,然后该操作会因以下类似消息而失败:
无法打开.git/svn/refs/remotes/trunk/.rev_map.cc05479a-e8ea-436f-8d71-e07493b7796c.lock:设备或资源忙,位于/usr/lib/git-core/git-svn line 5240
但是,确切的锁定文件和行号并不总是相同。我已将实际问题追踪到3679行。
这将创建一个新的.lock文件,我尝试了相应的方法但未成功。
编辑2:这可能不是Symantec,而是我们在网络计算机上运行的另一个程序。我让一些人调查,他们应该能够至少缩小原因范围。
对于任何涉及提取的操作,我可以完成部分操作,然后该操作会因以下类似消息而失败:
无法打开.git/svn/refs/remotes/trunk/.rev_map.cc05479a-e8ea-436f-8d71-e07493b7796c.lock:设备或资源忙,位于/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开发人员更喜欢找出根本原因,而不是采用恰好起作用的黑客行为(我认为是正确的方法)。那么,有谁能帮助我找到拒绝我打开这些.lock文件的罪犯?我有许多工具可以理论上用于此目的,但它们还没有全部完成:
- 进程资源管理器-显示进程拥有的所有句柄,还可以搜索拥有给定句柄的所有进程。但是,对于短寿命进程或句柄(这就是git svn clone / fetch所做的操作),它效果不佳
- Unlocker-检测到普通的“权限被拒绝”对话框出现,并找到引起问题的句柄并提供处理方法。但是,当非资源管理器程序遇到基于文件的错误时,它不会出现。
编辑2:这可能不是Symantec,而是我们在网络计算机上运行的另一个程序。我让一些人调查,他们应该能够至少缩小原因范围。
open(my $fh, "+<", $db_lock)
是否等同于O_RDWR | O_CREAT
? - mob