Alias ​​de Git: cómo pasar el directory actual al command de shell?

Estoy usando git bash en Windows, y me gustaría hacer un command de git alias que es conceptualmente algo como esto:

[alias] assume_unchanged_below = "!git ls-files -z $dir | xargs -0 git update-index --assume-unchanged" 

Donde $dir expande al directory de trabajo actual en el shell bash en el que se ejecutó git assume_unchanged_below .

Es decir, si estoy en C:\somedir\somesubdir y ejecuto git assume_unchanged_below me gustaría que fuera como si hubiera escrito git ls-files -z C:\somedir\somesubdir | xargs -0 git update-index --assume-unchanged git ls-files -z C:\somedir\somesubdir | xargs -0 git update-index --assume-unchanged

Parece que es posible get el directory actual a través de git rev-parse --show-prefix . También sé que es posible pasar arguments usando una function anónima, pero no he podido combinar estos dos conceptos para get el comportamiento que deseo.

Por ejemplo, si hago esto:

 [alias] assume_unchanged_below = "!f() { \ git ls-files -z $1 | xargs -0 git update-index --assume-unchanged; \ }; f" 

Entonces puedo escribir

 git assume_unchanged_below `git rev-parse --show-prefix` 

Y se comporta como se esperaba ( $1 se expandió correctamente al directory de trabajo actual).

Sin embargo, no quiero tener que pasar manualmente git rev-parse --show-prefix al alias, quiero que se deduzca automáticamente para que solo tenga que escribir

 git assume_unchanged_below 

hacer que opere en el directory de trabajo actual.

Lo he intentado

 [alias] assume_unchanged_below = "!f() { \ git ls-files -z $1 | xargs -0 git update-index --assume-unchanged; \ }; f `git rev-parse --show-prefix`" 

pero esto no funciona correctamente; $1 en f() está vacío. Presumiblemente, esto se debe a que el nuevo process de shell que está ejecutando f() tiene el directory raíz del repository como su directory actual.

¿Es posible hacer lo que estoy tratando de hacer en un git alias, o necesito crear un alias en mi .bashrc para lograrlo?

——————– Actualización con respuesta ——————–

La sugerencia de @ vampire de usar $ GIT_PREFIX funcionó, porque $ GIT_PREFIX henetworkinga su valor del shell git desde el cual se activó el alias original.

Aquí está el ejemplo de trabajo, con adornos para la usabilidad:

 [alias] assumeallbelow = "!f() { \ if [ x"$1" != x ]; then \ echo "You cannot specify the directory because this command operates on all files in the current directory and below"; \ return; \ fi; \ echo "Marking all files under $GIT_PREFIX as assume-unchanged"; \ git ls-files -z $GIT_PREFIX | xargs -0 git update-index --assume-unchanged; \ }; f" 

 git config alias.test '!git ls-files $GIT_PREFIX' 
    Intereting Posts