【问题标题】:Git alias for commit with branch name带有分支名称的提交的 Git 别名
【发布时间】:2022-01-19 21:35:53
【问题描述】:

我正在尝试创建一个简单的 bash 别名,以便在 MacOs 中使用我的分支名称提交。例如,如果我的分支是 CS-12,我通常会提交如下:

git commit /file/location/myfile -m "CS-12 my message goes in here"

所以我正在尝试创建一个只接收文件名和消息的别名,即:

gcm /file/location/myfile "my message goes in here"

我有以下,但它不工作:

alias gcm="echo git commit $1 -m \"$(current_branch) - $2\""

其中current_branch 是函数:

function current_branch() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || \
  ref=$(git rev-parse --short HEAD 2> /dev/null) || return
  echo ${ref#refs/heads/}
}

确实有效。

运行我的别名的输出:

gcm src/pages/register/Register.js "aasdasd asdasd"

正在回馈我:

git commit -m master - src/pages/register/Register.js aasdasd asdasd

知道我做错了什么吗? Bash 不是我的专业领域。 谢谢

【问题讨论】:

    标签: bash git github unix


    【解决方案1】:

    转义的引号被alias“剥离”,因此您需要再次转义它们:

    alias x="echo \\\"foo\\\""
    x
    "foo"
    

    【讨论】:

      【解决方案2】:

      别名不带参数。只写一个函数:

      gcm() { git commit "$1" -m  "$(current_branch) - $2"; }
      

      请注意,实际上不需要别名,也不应该使用它们。至少从 1996 年开始,bash 手册页就声明:“对于几乎所有目的,别名都被 shell 函数所取代。”

      【讨论】:

      • 添加到这一点,$1$2 在定义别名时被扩展。
      • 感谢您的回复。我已经尝试过了,但我得到了bash: /Users/bigweld/.bash_profile: line 60: syntax error near unexpected token `(' bash: /Users/bigweld/.bash_profile: line 60: `gcm() { git commit "$1" -m "$(current_branch) - $2"; }'
      • 再想一想。当 "$(current_branch) - $2" 与 gcm src/pages/register/Register.js "aasdasd asdasd" 时,注意到传递的消息已经在 " " 中,这是否意味着我会有一些损坏的消息?即:git commit src/pages/register/Register.js -m "CS-12 - " aasdasd asdasd " "?
      • @MrCujo 不,当您调用该函数时,引号将被删除。例如,如果你调用gcm foo "a b c",函数中$2的值就是字符串a b c。这与拨打gcm foo a\ b\ c没有什么不同;引号是为了防止参数被拆分。
      • @MrCujo 我相信会发生语法错误,因为您仍然定义了别名。在定义函数之前删除别名定义。
      猜你喜欢
      • 2022-08-02
      • 2019-01-31
      • 2019-11-20
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多