【问题标题】:programmatically delete .git .idx .pack files以编程方式删除 .git .idx .pack 文件
【发布时间】:2015-06-18 02:28:52
【问题描述】:

在 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);

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

访问路径'pack-33ea2068b66028f98ac9deb55c3b5d1450d65dea.idx' 被拒绝。

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

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

【问题讨论】:

  • 你能解释一下“特别有抵抗力”是什么意思吗?它们只是文件。 (除非其他进程同时打开了该文件。)
  • 异常似乎表明存在锁,但没有——这个应用程序在专用远程服务器上执行,实际上同一个应用程序创建本地存储库
  • 您是否在此服务器上运行了病毒扫描程序?如果病毒扫描程序在您尝试删除文件时正在扫描文件,它们通常会导致此类行为。

标签: windows git file


【解决方案1】:

某个进程正在处理该特定包文件(process explorer 可以是 check that for you

或者有权限问题,如libgit2sharp/issues/769

当您尝试删除 Windows 不喜欢的只读文件以及对象 git 的对象数据库(该索引文件是其中一个) 是只读的。

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

【讨论】:

  • 错误发生在我无法直接访问的远程服务器上(只能通过 TeamCity),但在我的本地工作站上 File.SetAttributes(path , FileAttributes.Normal); 可以很好地删除只读属性,所以我希望它可以在其他环境
  • 好的,那一定是服务器的访问权限问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2018-07-16
  • 2016-05-26
  • 1970-01-01
  • 2012-06-18
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多