【问题标题】:File in git repo becomes inaccessiblegit repo 中的文件无法访问
【发布时间】:2018-12-19 14:54:06
【问题描述】:

我在我的 win 10 工作站和在 VMWare 工作站上运行的 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 pull 不会恢复文件。

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

我检查了 update_aws_list_rds 分支,在我再次克隆目录后,删除目录之前已消失的文件仍然存在。

我使用的是 git 版本 2.17.1 和 VMware player 15。

发生了什么会导致这种情况?我怎样才能阻止这个问题的发生?

【问题讨论】:

    标签: git vmware vmware-workstation


    【解决方案1】:

    这个:

    我在我的 win 10 工作站和在 VMWare 工作站上运行的 Linux VM 之间共享我的 git 目录(我保存所有 git 存储库的位置)。

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

    这种共享存储永远无法正常工作。1 它在 Git 上的表现尤其糟糕,它坚持对其.git 目录进行完全、完整、100% 的控制。以这种方式使用 Git 有两条经验法则:

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

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


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

    【讨论】:

    • 好的,谢谢。我刚刚停止为此目的使用我的共享存储。我实际上并不仅仅共享 git 文件夹。我正在共享一个父文件夹,其中包含我共享的许多其他内容,git 目录恰好在那里。我刚刚将 git 文件夹从那里移到了 windows 机器和 linux vm 上的本地文件夹中。这应该可以解决问题。
    • 我的 Mac 上有一个类似的设置和一个 Linux 虚拟机,这真的很烦人,因为 MacOS 和 Linux 应该能够比 Windows 和 Linux 更好地协同工作。我偶尔会使用一些共享文件夹来传输文件,但为了可靠性,我必须将几乎所有 Linux 端数据保留在非共享区域中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多