Как я могу разобрать аргументы в функции оболочки, а затем сделать многострочную фиксацию с ней?

Я следую стандартному стандарту коммитов и хочу сделать функцию оболочки для сквоша, слияния и фиксации изменений с анализированным сообщением, улучшая мою скорость кодирования и согласованность коммитов.

Моя проблема состоит в том, чтобы проанализировать аргументы и затем использовать результат в сообщении фиксации.

  • Мой фактический код:

    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
    
Другие вопросы по тегам