Как я могу разобрать аргументы в функции оболочки, а затем сделать многострочную фиксацию с ней?
Я следую стандартному стандарту коммитов и хочу сделать функцию оболочки для сквоша, слияния и фиксации изменений с анализированным сообщением, улучшая мою скорость кодирования и согласованность коммитов.
Моя проблема состоит в том, чтобы проанализировать аргументы и затем использовать результат в сообщении фиксации.
Мой фактический код:
function git_merge_squash() { git merge --squash "$1" shift msg= echo $'\n'"$*" | tr . \\n | tr - ' ' # echo $msg git commit -m $msg } alias gmrs=git_merge_squash
Пример использования:
$ gmrs f/my_branch Features.- Signup.-- Save hashed password asynchronously.-- Retrieve token.- Login.-- Retrieve token.- Logout.-- Destroy token
Ожидаемый результат:
git merge --squash f/my_branch git commit -m " Features Signup Save hashed password asynchronously Retrieve token Login Retrieve token Logout Destroy token"
Как вы можете догадаться, в моем собственном коде мой комментарий echo
печатает именно то сообщение, которое я хочу. Но git commit -m
командование занимает $msg
как строка Я пробовал несколько других вариантов, таких как имитация ввода файла с -F
флаг, но я не мог решить это.
Как я могу достичь своей цели? Заранее спасибо.
2 ответа
Вам не нужно придумывать свою собственную кодировку для новых строк; просто используйте второй аргумент, отформатированный так, как вы хотите.
git_merge_squash() {
git merge --squash "$1"
git commit -m "$2"
}
gmrs f/my_branch "\
Features
Signup
Save hashed password asynchronously
Retrieve token
Login
Retrieve token
Logout
Destroy token"
Решение
Я решил это. Я надеюсь, что кто-то может получить помощь от этого.
Рабочий код
function git_merge_squash() { git merge --squash "$1" shift git commit -m "$(echo $'\n'"$*" | tr . \\n | tr - ' ')" } alias gmrs=git_merge_squash