–chmod no funciona con index-filter

Quiero usar filter-branch para establecer todos los files como no ejecutables porque la mayoría de los usuarios usan Windows. Ejecuté el siguiente command en Git Bash:

git filter-branch --index-filter 'for file in $(git ls-files) do git update-index --chmod=-x -- $file done' -- HEAD~1..HEAD 

Sin embargo, recibí un post de error:

 Rewrite bc4368aec16cce1c1faa7363dde9ac74ac28da6a (1/1) error: .gitignore: does not exist and --remove not passed fatal: Unable to process path .gitignore error: LICENSE.md: does not exist and --remove not passed fatal: Unable to process path LICENSE.md error: README.md: does not exist and --remove not passed fatal: Unable to process path README.md 

Como estoy en Windows, ni siquiera puedo usar –tree-filter con chmod (al less esto no me ha funcionado). Cuando uso –filter-tree en lugar de –filter-index funciona, pero estoy tratando de usar –filter-index porque se supone que es mucho más rápido.

Aunque su pregunta se centra en git filter-branch para hacer la reescritura, vale la pena considerar el BFG en su lugar -aunque no lo hace de la caja, es una pequeña modificación para agregar un limpiador TreeBlobs que establece todos los files no ejecutables :

https://github.com/rtyley/bfg-repo-cleaner/compare/non-executable

Puede build su versión personalizada de BFG con bastante facilidad:

https://github.com/rtyley/bfg-repo-cleaner/blob/master/BUILD.md

Usando la twig non-executable anterior, puede ejecutar el BFG sin ningún conmutador de línea de command adicional, porque el limpiador está cableado (siga todas las instrucciones de uso del BFG, este es solo el bit de núcleo):

 $ java -jar bfg-custom.jar my-repo.git 

Esto se ejecutará varios cientos de veces más rápido que git filter-branch (con o sin --filter-index ) en cualquier repository grande – por ejemplo, hice una testing de este limpiador personalizado en el proyecto linux-kernel (~ 500k commits) , que se completó en less de 5 minutos.

Descripción completa: soy el autor de BFG Repo-Cleaner.