bash - 如何将除前两个之外的所有 bash 参数设置为 git 别名
问题描述
我想创建一个 git 别名,它将使用我定义的模板创建提交消息。
这是模板:
"[$firstVariable] $secondVariable: $thirdVariable"
- 第一个是分行号,
- 第二个是提交的类型,
- 最后一个参数是提交消息的主题
示例:
“[1000] 壮举:添加新的销售控制器”
.gitconfig
这是我在文件中的 bash 函数:
[alias]
c = "!f() { branchNumber=${1}; type=${2}; shift; shift; subject=${*}; git commit -m '['"$branchNumber"'] '"$type"': '"$subject"' '; }; f"
我可以获得前两个变量,但在第三个变量中,终端出现错误。
如果我执行这个命令,我会得到这个:
命令:$ git c 1000 feat add new sales controller
返回:
错误:pathspec 'sales' 与 git 已知的任何文件都不匹配。
错误:pathspec 'controller' 与 git 已知的任何文件都不匹配。
观察:
- 如果我在
$subject
命令返回处添加回显函数:
新销售总监
错误:pathspec 'sales' 与 git 已知的任何文件都不匹配。
错误:pathspec 'controller' 与 git 已知的任何文件都不匹配。
- 如果我只是在
$subject
别名处添加一个参数正在工作
解决方案
.gitconfig
Git 在解析行时“吃掉”一层双引号。因此,当您写道:
"!f() { branchNumber=${1}; type=${2}; shift; shift; subject=${*}; git commit -m '['"$branchNumber"'] '"$type"': '"$subject"' '; }; f"
外壳看到的是:
!f() { branchNumber=${1}; type=${2}; shift; shift; subject=${*}; git commit -m '['$branchNumber'] '$type': '$subject' '; }; f
请注意,剩下的唯一引号是单引号,因此当$subject
展开时,它变成单独的单词:
git c 1000 feat add new sales controller
变成:
git
commit
-m
[1000] feat: add
new
sales
controller
(我在一行上单独绘制了每个“单词”)。(单词 之后还有一个空格controller
,因为它受单引号保护。)如果您愿意,另一种为 StackOverflow 发布目的绘制它的方法可能是:
git
commit
-m
[1000] feat: add
new
sales
controller
也就是说,命令本身将这些中的每一个视为一个单独的“词”:因此,提交日志消息是[1000] feat: add
; new
, sales
, 和controller
被视为pathspec参数。
一种简单的解决方法是用反斜杠双引号替换您希望保留的每个双引号:
c = "!f() { branchNumber=${1}; type=${2}; shift; shift; subject=${*}; git commit -m '['\"$branchNumber\"'] '\"$type\"': '\"$subject\"' '; }; f"
为了使其更具可读性,请注意双引号足以用于整个-m
参数(并且这里的各个地方都不需要大括号):
c = "!f() { branchNumber=$1; type=$2; shift 2; subject=$*; git commit -m \"[$branchNumber] ${type}: $subject\"; }; f"
推荐阅读
- windbg - 从完整的内存转储中查看托管堆栈
- python - Pandas DataFrame 多线程没有性能提升
- php - 使用title从数据库codeigniter中获取数据
- javascript - 在具有相同类的列表之间进行反应切换
- python - 在 Python 3.6 上导入 tensorflow 问题
- android - 下载管理器不接受没有扩展名的 url
- android - React Native - 获取非 https url 时出现“网络请求失败”
- python - 使用 docker-py 从现有容器运行 docker 容器
- debugging - React 导航:如何调试
- vba - 共享存储在 PRIVATE 模块中的变量