Użycie git update-index –no-assume-unchanged na wszystkich plikach w PowerShell

Aby uzyskać rezultat z tytułu należy wykonać komendę:

git ls-files -v | Select-String -Pattern '^h' -CaseSensitive | %{git update-index --no-assume-unchanged $_.Line.SubString(2)}

 

 

git ls-files –v

Zwraca pliki w indeksie

 

Select-String -Pattern '^h' -CaseSensitive

Zaczynające się od “h” (czyli te assume-unchanged)

 

%{git update-index --no-assume-unchanged $_.Line.SubString(2)}

i wykonuje na nich komende  –no assume-unchanged (bez “h “ na początku)

IEnumerable jest leniwe

Jak myślicie co zwróci taki kod:

var list = new List{1,2,3};
var filtered = list.Where(i => i > 1);
list.Clear();
return filtered.Count();

Oczywiście, że 0. A czemu? Bo IEnumerable jest leniwe. Jeśli nie musi, to nie ruszy czterech liter i nie wykona się. Wykonanie jest odroczone do momentu pobrania wartości (czy to foreach, czy np. .Any()).

W powyższym przykładzie filtrowanie jest wykonane w momencie użycia Count(), czyli gdy lista jest już pusta. Należy o tym pamiętać. Gdy mimo wszystko chcemy wartości mieć wyliczane natychmiast należy dodać .ToList() albo .ToArray().

Aby powyższy przykład działał tak jak chcę powinien wyglądać tak:

var list = new List{1,2,3};
var filtered = list.Where(i => i > 1).ToList();
list.Clear();
return filtered.Count();