¿Es posible cd a un antepasado dentro de un árbol de directorios sin saber hasta dónde debo llegar?

¿Es posible cd a un antepasado dentro de un árbol de directorios sin saber hasta dónde debo llegar?

Estoy escribiendo un script para automatizar la adición, confirmación y envío de cambios a mi submódulo y repositorio. Algunos submódulos están anidados más lejos que otros y necesito hacer una copia de seguridad del CD hasta la raíz del repositorio. No estoy usando el git submodule foreachpatrón porque puede haber cambios en otros submódulos que no quiero comprometer con ellos (una prueba rápida) desde la rama en la que estoy trabajando. Tengo una rama en el superrepositorio configurada para cada submódulo, convenientemente nombrada de manera que al usar cd con ella se bajará al repositorio.

encontréesta preguntaque tiene respuestas relacionadas con la creación y/o el alias de una función para subir n niveles. Podría hacer algo como esto porque ya tengo algunas funciones con alias para otras acciones, pero requeriría una función diferente para cada directorio o un script diferente, por lo tanto, una tecla de acceso rápido diferente, en Git Extensions que está en un nivel diferente.

Estoy usando Git Extensions para administrar mi repositorio y proporciona una interfaz de secuencias de comandos en su configuración. Mi función actual bajo el alias en .git/config:

applyupdate = "!f() { \
                      cd \"$1\"/;\
                      git add .;\
                      git commit -m \"$2\";\
                      git push;\
                      cd ..;\ #####this needs to be n levels
                      git add \"$1\";\
                      git commit -m \"$2\";\
                      git push;\
                    }; f"

Esto se ejecuta en Git Extension mediante una tecla de acceso rápido que lo ejecuta con los siguientes argumentos:

applyupdate {cBrnach} {{UserInput}}

¿Dónde {cBranch}estará la rama activa o solicitará una rama si hay varias en la misma confirmación en el gráfico
y {{UserInput}}aparecerá un cuadro de diálogo para insertar un mensaje de confirmación citado?

¿Se puede cd n-levelshacer con una sola función y de manera que no necesite ingresar cuántos niveles necesito subir? No creo que la {UserInput}opción en Git Extensions funcione con múltiples entradas.

Respuesta1

Gracias aArkadiusz Drabczykpor mencionar git rev-parse --show-toplevel.
Cambiar el script a esto me funciona:

applyupdate = "!f() { \
                      cd \"$1\"/;\
                      git add .;\
                      git commit -m \"$2\";\
                      git push;\
                      cd ..;\ #this gets me out of the submodule
                      cd \"$(git rev-parse --show-toplevel)\";\ #this return to super-repo's root
                      git add \"$1\";\
                      git commit -m \"$2\";\
                      git push;\
                    }; f"

información relacionada