所以,最近 Windows 决定对我进行一些欺骗,并使我无法提交到我的 git 存储库
它在 git 中(在 Cygwin 中)给了我这个错误:
$ git commit -a
error: insufficient permission for adding an object to repository database .git/objects
error: NVG510Fixer/NVG510Fixer/Resources/layout/WarningConfirmation.axml: failed to insert into database
error: unable to index file NVG510Fixer/NVG510Fixer/Resources/layout/WarningConfirmation.axml
fatal: updating files failed
好吧...但随后我进入 NVG510Fixer 文件夹并递归地获取其中所有内容的所有权,并确保每个人拥有完全控制权。这似乎有效,但并不能消除错误。因此,我决定转到.git
并右键单击属性,然后从那里(递归地)获取所有权。此时,情况变得更加奇怪:
Windows 到底在干什么?!我是管理员。这台计算机甚至没有加入域。我怎么就不能访问几分钟前还能访问的文件了!?
答案1
使用takeown
来自管理命令行的命令。可以删除Full Access
管理员组的权限,如果发生这种情况,GUI 版本无法更改权限,但命令行命令仍然可以执行此操作。
takeown /f C:\dev\nvg510controls\.git /r /d Y
如果你想要更特别,你可以设置权限通过命令行也
icacls C:\dev\nvg510controls\.git /t /grant Everyone:(F)
如果这两个命令都不起作用,请下载执行程序并执行命令
psexec -i -s icacls C:\dev\nvg510controls\.git /t /grant Everyone:(F)
它将icacls
以 SYSTEM 用户而不是管理员用户身份运行。
答案2
我不知道这是否会对任何人有所帮助,但我在这里要指出的是,我刚刚遇到了 Git 没有权限访问文件的问题,并尝试了上述答案但没有成功。
问题原来是这样的,在一台相当新的服务器上,企业病毒检查程序发现 Git 进程的 .git 目录中有大量活动,因此将 Git 标记为可疑进程并停止允许其访问任何文件。
答案3
尝试将所有者重新改为其他人,然后再递归改回您自己。这对我来说通常很管用。我认为这可能是因为您无权访问子文件夹和文件,而只能访问 .git 文件夹。更改所有者并选择所有子文件夹选项。然后在启用相同树选项的情况下更改权限,看看是否有效