Я пишу скрипт для автоматизации добавления, фиксации и отправки изменений в мой подмодуль и репозиторий. Некоторые подмодули вложены глубже, чем другие, и мне нужно сделать 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"