Git: 致命错误:'sha1 file'上的fsync错误:坏的文件描述符。

9
我正在使用VS Code和Git,它在便携位置C:\_DEV\bin\git中,并已添加到Windows PATH中,因此可以正常工作,没有远程连接问题。
我有一个OneDrive文件夹<_GIT>,其中包含我的一些“远程”存储库,这些存储库在两个设备之间同步(有时,我主要是为了备份而将其放在那里)。
当我想提交更改时出现错误,唯一解决此问题的方法是重新启动计算机,因此我想找到一种正确解决该问题的方法。问题是,它并不总是出现,也不是所有存储库都会出现,它是相当随机的。
我认为这是由于与OneDrive的同步引起的。有没有命令我可以运行来修复文件描述符?还是其他预防方法?
git remote --verbose
git ls-tree -l HEAD -- a:\new\theme\assets\sass\main.scss
git show 97a333c5e7fce816dbb46a5c1235d69e61836726
git show HEAD:theme/assets/sass/main.scss
git add -A -- a:\new\theme\assets\sass\main.scss
fatal: fsync error on 'sha1 file': Bad file descriptor

3
适当的解决方案不是将你的 Git 仓库存储在网络驱动器上。(我不是在挖苦你。这明确地不是一个受支持的场景。) - Edward Thomson
但这不是网络驱动器,它是我的本地驱动器,并且已同步到OneDrive云存储中。 - moped
2
当我在虚拟机中使用映射到本地驱动器的GIT时,遇到了同样的问题。显然这是由于GIT引起的,因为我没有使用VS Code。 - Al Kepp
我也遇到了这个问题,当主存储库在另一个工具中打开时,在Visual Studio Code中失败。尝试关闭Visual Studio 2019,看看是否解决了这个问题。 - AlainD
你有这方面的来源吗,@EdwardThomson?我无法找到任何证据证明你的说法是正确的。 - clbx
8个回答

15
多亏了 @edward-thomson。
我在我的电脑上遇到了同样的问题,在那里,我将一个家目录下的文件夹映射到了 E:。
C:\Users\myuserid\E-Folder\SomeGitProject

通过共享文件夹,我可以将其设为快捷方式。
E:\SomeGitProject

解决方法是在CMD中使用完整路径或者在Git Bash中使用homedrive的快捷方式:

~/E-Folder/SomeGitProject

我猜您的A:驱动器同样是一个共享文件夹,您可以通过完整路径访问它,可能也位于您的主目录下。


1
谢谢,在长时间的测试后,我发现 OneDrive 没有问题,但问题出在您建议映射到驱动器的文件夹中。因此,现在我有文件夹 A_DEV、B_DEV、Y_DEV,同样具有功能,只是没有共享和驱动器。 - moped

9
我发帖晚了,但我想要帮助其他人更快地找到解决方法。罪魁祸首很难找,我试过重新安装GIT、创建新的存储库等所有方法都不行。 在Windows上出现这种情况是由于某个父文件夹中的权限发生了变化。 解决方法就是简单地断开并重新映射文件夹。

1
是的,当你映射驱动器时会出现问题。不要映射驱动器,而是将其作为“我的电脑”中的特殊文件夹,这样你就可以快速访问,而不会遇到Git问题。 - moped
我也遇到了同样的问题,错误信息是fatal: fsync error on 'loose object file': Bad file descriptor。可能的解决方案是更改父文件夹的所有权。 - Braza
为了上下文,我的 Hyper-V VM 将一个驱动器映射到主机机器的共享目录。使用完全相同的设置 (即 SourceTree、存储在映射驱动器上的文件、BitBucket 帐户等)... 'RepositoryA' 没有问题,而在我尝试对 'RepositoryB' 进行文件暂存时会生成 'fsync 错误'。解决方案:断开连接并重新映射驱动器对我也起作用了。现在 'RepositoryA' 和 'RepositoryB' 都可以工作。 - Pressacco
2
在我之前的帖子5分钟后,“fsync错误”再次出现了。我有一种隐隐的感觉,这可能与同时在同一存储库上运行Visual StudioSourceTree有关。过去我从未遇到过这样的问题。 - Pressacco
1
@Pressacco,这对我来说是个最新的问题(将近三年后)。更具体地说,在我的情况下,同时运行VS2019和VS2022的一个实例。我关闭了VS2022,问题立即消失了。 - Boise

5

我最近经常遇到这个错误,上面的答案有所帮助,但似乎还有一件事也会导致这个错误,那就是VS本身正在运行。

尝试关闭VS,然后从资源管理器中进行“Git Bash Here”,并仅使用命令行。

完成后可以重新打开VS。


我在使用 Visual StudioSource Tree 时一直收到 fsync 错误。根据 @Whelkaholism 的建议,我关闭了这两个应用程序,并通过 Git Bash 创建了提交。它奏效了!顺便说一下,为了进行提交而不是逐个暂存文件,可以使用以下命令:git add $(git rev-parse --show-toplevel) - Pressacco

2

我曾经遇到过相同的问题。我通过以下步骤解决了这个问题:

1- 关闭 Visual Code

2- 在 git bash 命令行中打开项目

3- 再次提交代码


2

我还将我的根网站空间映射为驱动器。 这没问题,直到文件被观察到(例如使用npm run watch)。


是的,这是可能的。我使用Prepros进行开发,因此该项目文件夹一直受其监视..但我不再遇到这些问题了。我已经使用ThisPCTweaker将我的“www”文件夹映射为自定义文件夹(在我的计算机中与下载或桌面相同)。 - moped

1

我曾经遇到过与Visual Studio 2017相同的问题。我的解决方法是关闭Visual Studio,然后打开Visual Studio CODE并在那里合并文件。


0

我之前也遇到了同样的问题。在我的情况下,问题是磁盘空间不足。希望这能帮助到某些人。


0
重新启动 VS Code 即可。比断开连接并重新映射文件夹更容易(这也可以解决问题)。

1
也许对你有效,但对我绝对无效 :) 那是我尝试的第一件事... - moped

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接