git 存储库中的文件变得无法访问

File in git repo becomes inaccessible

我正在我的 win 10 工作站和 VMWare Workstation 上的 Linux VM 运行 之间共享我的 git 目录(我在其中保存所有 git 存储库)。使用一段时间后,我正在使用的脚本(称为 aws_utils.sh)变得无法访问。

我刚刚保存了一些对文件的更改,提交并推送了它们。然后我切换分支。我看到这条消息:

 git checkout update_aws_list_rds
error: unable to create file aws_utils.sh: Permission denied
Switched to branch 'update_aws_list_rds'
D       aws_utils.sh

我没有删除这个文件。这是我的主文件,我不会那样做。

然后我查看了该文件的权限,它们看起来像这样(在 linux 下):

-????????? ? ?       ?       ?            ? aws_utils.sh

而且我无法对文件执行任何操作:

ls -lh aws_utils.sh 
ls: cannot access 'aws_utils.sh': Permission denied

即使是 root,我也无法列出文件:

ls -lh aws_utils.sh 
ls: cannot access 'aws_utils.sh': Permission denied
whoami
root

然后几分钟后文件就消失了,就好像我已经删除了它一样。执行 git 拉取不会恢复文件。

我必须从字面上删除目录并再次克隆它才能取回文件。

我检查了 update_aws_list_rds 分支,在我再次克隆该目录后,我删除该目录之前消失的文件就在那里。

我正在使用 git 版本 2.17.1 和 VMware player 15。

这是怎么回事?我怎样才能阻止这个问题发生?

这个:

I am sharing my git directory (where I keep all my git repos) between my win 10 workstation and a Linux VM running on VMWare Workstation.

几乎可以肯定是问题所在。

这种共享存储永远无法正常工作。1 它与 Git 的配合特别糟糕,它坚持完全、完全、100% 控制其.git 个目录。以这种方式使用 Git 有两个经验法则:

  1. 不要这样做。
  2. 如果必须这样做,请确保至少从一侧以 100% 只读方式进行。

因为 Git 已经有 自己的 共享协议,设置 VMWare 或 VirtualBox 系统非常容易,这样主机和客户端就只是两台不同的机器,有两个不同的 Git 存储库,它们使用 git push and/or git pull 在它们之间传输对象。这样每个 Git 都可以完全、完整、100% 地控制自己的 .git 和相应的工作树,并且 确实 工作正常。


什么,从来没有?
嗯,几乎没有!