![Можно ли выполнить cd к родительскому элементу в дереве каталогов, не зная, насколько высоко мне нужно подняться?](https://rvso.com/image/1604772/%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20cd%20%D0%BA%20%D1%80%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%BC%D1%83%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%B2%20%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B5%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%2C%20%D0%BD%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%8F%2C%20%D0%BD%D0%B0%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%20%D0%BC%D0%BD%D0%B5%20%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%20%D0%BF%D0%BE%D0%B4%D0%BD%D1%8F%D1%82%D1%8C%D1%81%D1%8F%3F.png)
Я пишу скрипт для автоматизации добавления, фиксации и отправки изменений в мой подмодуль и репозиторий. Некоторые подмодули вложены глубже, чем другие, и мне нужно сделать 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"