我試圖修復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