我有一个我写的 Excel 插件的 git 存储库,所以路径是“C:\Program Files\Microsoft Office 15\root\office15\Library\BTRTools”(该“库”路径是 Excel add-让他们正常工作,所以我不能改变它)。我在 Win7 和 Win8.1 中都打开了 UAC。在 Win7 中一切正常,但是在 Win8.1 中,我的状态基本上是“一切都改变了”(但甚至一些奇怪的文件首先被提到为“已删除”,然后再次以与“未跟踪”相同的状态被提及。存储库真的'干净',尽管 git status 说什么,但我不能拉或做 reset --hard 或任何东西。
如果我使用“以管理员身份运行”选项运行“Console2”(我从中发出 git bash 命令的应用程序),则一切正常且状态干净(未列出任何更改)。我可以正确地执行拉动和任何其他命令。
在 Win7 和 Win8.1 中,我已为我的用户手动授予对 BTRTools 文件夹的完全访问权限(即使我已经是两者的管理员组的一部分)并验证 Console2 确实在 Win8.1 中以我的本地用户身份运行.
以前有没有人遇到过这个问题,并且对如何让 Console2/git 在 Win8.1 中正常工作有任何想法,而无需在“以管理员身份运行”模式下始终运行(得到提示)Console2?
提前致谢。
更新
我发现在特定条件下我在 Win7 中得到了相同的行为。我编写了一个脚本,通过创建和运行 ac# Process/ProcessStartInfo来批处理多个 git 命令,它显示的行为与 Win8.1 Console2 相同。在 Win7 控制台与 Win7 脚本(即 git status)中直接调用完全相同的命令会显示两个不同的结果。
该脚本(用 LINQPad 编写)以我当前的用户身份运行,但我假设当它创建并启动Process/ProcessInfo时,它以某种方式在不同的用户下运行。通过提供我的凭据,我能够在我的脚本中更正这个问题
p.UserName = Environment.UserName;
p.Password = new System.Security.SecureString();
foreach( var c in password.ToCharArray() )
{
p.Password.AppendChar( c );
}
注意:我验证了 Win7 和 Win8.1 中“我的”用户的安全组/设置似乎相同(属于 Admin 组)。
更新:获取 ACL 输出
我跑了 Get-ACL | 两台机器上 /BTRTools 目录上的格式列表。唯一的区别是 Win8 基本上对所有文件夹都有“应用程序包授权”,而 Win7 没有。不确定这是否暗示了任何事情。
更新:已解决
感谢@ian-boyd 为我指明了正确的方向。在 Console2/Git 工作正常的 Win7 机器上,我发现我有以下文件:
C:\Users\terry.aney\AppData\Local\VirtualStore\Program Files\Microsoft Office 15\root\office15\Library\BTRTools.git\index
我不确定它是什么时候创建的。如果我删除它,我在 Win7 上的 Console2/Git 开始“失败”,就像 Win8 所呈现的行为一样。我在 Win7 上恢复它,并将其复制到 Win8,现在 Console2/Win8 也正常运行。我有更大的战斗要打,所以我要继续前进。我不太明白这一点,但作为旁注,这是我尝试过的一些步骤
- 根据此页面为用户组设置对 \Git 安装目录的完整文件/目录访问权限
- 在 #1 中关闭每个用户位置的虚拟化文件和注册表写入失败。
- 为用户组设置对 \Library 目录的完整文件/目录访问权限。
如果有人对处理此问题的“正确”方法有任何意见,我会全力以赴。