以编程方式删除 .git .idx .pack 文件

Bal*_*tar 5 windows git file

在 Windows Server 2008 上运行的 ASP.NET C# 应用程序

我发现 Git .idx 和 .pack 文件对程序删除特别有抵抗力:

C:\github\my-org\my-repo\.git\objects\pack\pack-905fbcfd5f24c5711de900f3946b4137d26df6d5.idx

C:\github\my-org\my-repo\.git\objects\pack\pack-905fbcfd5f24c5711de900f3946b4137d26df6d5.pack

git clone 操作将文件创建为只读 - 但即使关闭该位,删除仍然有问题:

var path = @"C:\github\my-org\my-repo\.git\objects\pack\pack-33ea2068b66028f98ac9deb55c3b5d1450d65dea.idx";

File.SetAttributes(path , FileAttributes.Normal);
File.Delete(path);
Run Code Online (Sandbox Code Playgroud)

File.Delete(path) 代码抛出异常:

拒绝访问路径“pack-33ea2068b66028f98ac9deb55c3b5d1450d65dea.idx”。

由于路径不在我的站点目录中,我想知道 ASP.NET 站点 AppPool 工作进程标识是否需要明确分配权限以写入/删除其应用程序域之外的文件夹/文件?

请注意,在我的 Windows 7 本地工作站上,调用删除目录操作的 nUnit 测试运行绿色。在调试器中,我可以证明一旦从所有文件(如果存在)中删除只读属性,Directory.Delete(path,true) 操作就不会抛出。

Von*_*onC 7

任一进程正在保留该特定包文件的句柄(进程资源管理器可以为您检查

或者存在正确访问问题,如libgit2sharp/issues/769中:

该消息看起来就像您在尝试删除 Windows 不喜欢的只读文件时收到的消息,并且读取了 git 的对象数据库(索引文件就是其中之一)的对象-仅有的。

删除只读标志允许我删除整个目录。

  • 错误发生在我无法直接访问的远程服务器上(只能通过 TeamCity ),但在我的本地工作站“File.SetAttributes(path , FileAttributes.Normal);”上可以很好地删除只读属性,因此我希望它能够在其他环境中做 (4认同)