2013-05-02 3 views
32

Sto cercando di eseguire il seguente:ricorsivo git update-index --assume-invariata

git update-index --assume-unchanged myFolderToIgnore 

Dove myFolderToIgnore è una cartella. Tuttavia fallisce dicendo che è "incapace di segnarlo".

Così ho provato:

git update-index --assume-unchanged myFolderToIgnore/ 

Quali GIT risponde con Ignoring path myFolderToIgnore/, ma non fa nulla (che vede ancora i miei cambiamenti e cerca di controllarli in).

Alla fine ho dovuto entrare e contrassegnare manualmente ogni singolo file come invariato. Cosa mi manca qui?

+0

forse volevi fare "--asume-immutato" ?? – Chronial

+0

oops, quello era un errore di battitura :) Il codice che sto usando utilizza effettivamente '--assume-unchanged' – uglymunky

risposta

50

update-index è un comando interno idraulico e quindi non comodo come i comandi front-end reali. Si dovrà gestire il bit ricorsione da soli:

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

Su un sistema GNU' ls-files -z' con 'xargs -0' è una soluzione più robusta, solo nel caso ci siano file con spazi bianchi nei loro nomi. –

+1

Buon punto - risolto – Chronial

1

mi sono imbattuto in questo problema per cui la mia cartella aveva centinaia di migliaia di file, e le migliaia di cartelle.

Ciò ha provocato "Elenco argomenti troppo lungo".

La seguente soluzione eseguirà il comando per ogni cartella e attraverserà il contenuto in tali cartelle. Quindi fino a quando centinaia di migliaia di file sono separati in cartelle, allora funzionerà.

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