簡體   English   中英

Git 錯誤:無法創建臨時文件並在沒有更多信息的情況下錯誤構建樹?

[英]Git error: unable to create temprary file & error building trees with no further info?

我正在嘗試對我的存儲庫進行新的更改,但它失敗並出現以下錯誤:

error: unable to create temporary file: Invalid argument
error: unable to create temporary file: Invalid argument
error: Error building trees

當其他人遇到類似問題時,錯誤將指向導致問題的特定文件/對象,但是這里沒有關於 go 的其他信息。

(Windows 10,通過終端和 cmd 嘗試)

我發現了問題 - 項目文件夾正在與 OneDrive 同步,該文件夾已損壞(重解析點緩沖區中存在的標簽無效.git內的objects文件夾中的一個文件。 可以通過視覺方式找出問題所在(對我來說,這是唯一一個帶有藍色 OneDrive 同步箭頭而不是綠色勾號的文件夾,並且無法打開該文件夾)。 另一種方法是將有問題的分支克隆到一個新文件夾中,稍作改動(我創建了一個test.txt ,里面寫了“test”),將其推送到 git,然后 go 回到有問題的項目文件夾並嘗試拉新從 git 更改。 此操作失敗並指向損壞的 object。

為了解決這個問題,我研究了如何處理 OneDrive 損壞的文件,最常見的建議是在命令提示符(作為管理員)中運行chkdsk c: /r /f ,它在計算機重新啟動時啟動。 請注意,它可能需要幾個小時才能完成。

一般 Windows 解決方案(在 Windows 10 和 11 上測試):我收到錯誤,因為似乎 windows 將文件夾置於只讀模式

取消選擇只讀,然后單擊應用並確定

在此處輸入圖像描述

Git 真的應該在這里打印路徑,是的。 該錯誤似乎來自object-file.c:write_loose_object() ,在正常情況下它將在.git/objects中創建一個臨時文件。

EINVAL錯誤情況永遠不會發生,因為 object 路徑本身一定是有效的(否則它是如何存在的?)並且生成的臨時文件名使用完全“安全”的字符。 因此,錯誤消息中缺少的filename.buf一開始就不應該出現。 在您的情況下,錯誤確實出現了,並且filename.buf缺少%s意味着我們看不到您的操作系統反對的路徑。

您可以構建 Git 的調試或私有版本(添加缺少的路徑)來查找,或使用任何系統調用跟蹤工具以其他方式觀察失敗的系統調用。 找出操作系統拒絕創建松散 object 臨時文件的嘗試的原因,並糾正潛在的問題。 同時,您可能希望將此報告給 Git 郵件列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM