【发布时间】:2019-07-15 04:55:06
【问题描述】:
我试图找到一种方法来确定 git 存储库中的文件是否由 git-lfs 正确管理。
到目前为止,我发现比较 git lfs ls-files 和 git ls-files ':(attr:filter=lfs)' 的结果似乎可以满足我的需求。
Add-Type -AssemblyName 'System.Linq';
[string[]] $actualLfsFilePaths = git lfs ls-files | `
ForEach-Object `
{
#'12345678 * my.dll' - not all lfs versions support -n flag, so it is better to be conservative
$_.Split(' ', 3)[2]
};
[string[]] $shouldBeUnderLfsFilePaths = git ls-files ':(attr:filter=lfs)';
$filePathsNotUnderLfs = [System.Linq.Enumerable]::ToArray(
[System.Linq.Enumerable]::Except($shouldBeUnderLfsFilePaths, $actualLfsFilePaths)
);
$count = $filePathsNotUnderLfs.Count;
Write-Host "There are $($count) lfs files that are not under lfs";
foreach ($filePathNotUnderLfs in $filePathsNotUnderLfs)
{
Write-Host "`t'$filePathNotUnderLfs'";
}
if ($count -gt 0)
{
Write-Error "There are $count lfs files that are not under lfs";
return 1;
}
return 0;
我仍然不确定这是一种可靠的方法。那么,这是一种可靠/正确的方法吗?或者也许有替代方案?
PS:我想要实现的是创建一个拉取请求验证构建(用于 TFS 存储库),它将检测由于某种原因而经常发生并导致不必要的 lfs 违规(提交的文件未添加到 lfs)最好是警告和 repo 膨胀,最坏的情况是主要的 nuisances。
编辑: 嗯,发现现在的代码有些问题:
但它们相对容易修复,不会改变问题的要点。
【问题讨论】:
-
我得到了你想要的,但如果这发生在拉取请求期间,为时已晚。文件已经推送。回购是臃肿的。 TFS git repos 不进行 GC,所以一旦它存在,它就在那里。
-
@DanielMann 是的,但至少这些文件不会到达主服务器。然后作者会以一种或另一种方式解决问题。
标签: git powershell tfs git-lfs git-ls-files