Можно ли выполнить cd к родительскому элементу в дереве каталогов, не зная, насколько высоко мне нужно подняться?

Можно ли выполнить cd к родительскому элементу в дереве каталогов, не зная, насколько высоко мне нужно подняться?

Я пишу скрипт для автоматизации добавления, фиксации и отправки изменений в мой подмодуль и репозиторий. Некоторые подмодули вложены глубже, чем другие, и мне нужно сделать cd back up в корень репозитория. Я не использую шаблон, git submodule foreachпотому что в других подмодулях могут быть изменения, которые я не хочу фиксировать в них (быстрый тест) из ветки, над которой я работаю. У меня есть ветка в супер-репозитории, настроенная для каждого подмодуля, удобно названная так, что использование cd с ней переместит вниз в репозиторий.

я нашелэтот вопросв котором есть ответы, которые относятся к созданию и/или псевдонимизации функции для cd up n-levels. Я мог бы сделать что-то вроде этого, поскольку у меня уже есть некоторые псевдонимы функций для других действий, но это потребовало бы другой функции для каждого каталога или другого скрипта, следовательно, другой горячей клавиши в Git Extensions, которая находится на другом уровне.

Я использую Git Extensions для управления моим репозиторием, и он предоставляет интерфейс скриптов в своих настройках. Моя текущая функция под псевдонимом в .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"

Это выполняется в расширении Git с помощью горячей клавиши, которая запускает его со следующими аргументами:

applyupdate {cBrnach} {{UserInput}}

где {cBranch}будет активная ветвь или запрос на ветку, если несколько ветвей лежат на одном и том же коммите в графе
, и {{UserInput}}откроется диалоговое окно для вставки цитируемого сообщения о коммите.

Можно ли cd n-levelsсделать это с помощью одной функции и таким образом, чтобы мне не нужно было вводить, на сколько уровней мне нужно подняться? Я не думаю, что опция {UserInput}в Git Extensions работает с несколькими входами.

решение1

БлагодаряАркадиуш Драбчикдля упоминания git rev-parse --show-toplevel.
Изменение скрипта на этот работает для меня:

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"

Связанный контент