2013-05-02 7 views
32

Próbuję uruchomić następujący:Recursive git zmiana indeksu --assume-niezmienione

git update-index --assume-unchanged myFolderToIgnore 

Gdzie myFolderToIgnore jest folder. Nie udaje mu się jednak powiedzieć, że "nie można go oznaczyć".

Tak próbowałem:

git update-index --assume-unchanged myFolderToIgnore/ 

Które GIT zaspokaja z Ignoring path myFolderToIgnore/ ale nic nie robi (jeszcze widzi moje zmiany i próbuje sprawdzić je w).

W końcu musiałem wejść i ręcznie oznaczyć każdy pojedynczy plik jako niezmieniony. Czego tu mi brakuje?

+0

czy może chcesz zrobić "--asume-unchanged" ?? – Chronial

+0

oops, to był literówka :) Kod, który prowadzę, w rzeczywistości używa '--assume-unchanged' – uglymunky

Odpowiedz

50

update-index jest wewnętrznym poleceniem instalacyjnym i dlatego nie jest tak wygodne, jak prawdziwe polecenia front-end. Trzeba będzie obsługiwać bit rekursji siebie:

git ls-files -z myFolderToIgnore/ | xargs -0 git update-index --assume-unchanged 
+2

W systemie GNU' ls-files -z 'z' xargs -0' jest bardziej niezawodnym rozwiązaniem, po prostu na wypadek, gdyby w ich nazwach znajdowały się pliki z białymi znakami. –

+1

Dobra uwaga - naprawiona – Chronial

1

wpadłem na ten problem gdzie mój folder miał setki tysięcy plików i tysiące folderów.

Spowodowało to "Zbyt długi list argumentów".

Następujące rozwiązanie uruchomi polecenie dla każdego folderu i przejrzy zawartość w tych folderach. Tak długo, jak setki tysięcy plików są rozdzielone w folderach, to zadziała.

find . -maxdepth 1 -type d \(! -name . \) -exec bash -c "cd '{}' && pwd && git ls-files -z ${pwd} | xargs -0 git update-index --assume-unchanged" \;