Я пытаюсь найти способ определить, правильно ли git-lfs управляет файлами в репозитории git.
До сих пор я обнаружил, что сравнение результатов из 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-файлах
- Символические ссылки
, но они относительно легко исправляются и не меняют сути вопроса.