Я пытаюсь найти способ определить, правильно ли файлы в репозитории 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), которые часто возникают по той или иной причине и приводят к ненужным предупреждениям и репо в лучшем случае раздувание и серьезные неприятности а> в худшем случае.
РЕДАКТИРОВАТЬ: Что ж, обнаружил, что есть некоторые проблемы с текущим кодом:
- обработка пустых файлов
- восьмеричное кодирование для не -ASCII-символы в ls-файлах
- Символические ссылки
но они относительно легко исправляются и не меняют сути вопроса.