git - 在不换行的情况下添加 git commit 消息
问题描述
我在prepare-commit-msg
钩子中使用这个衬线在提交消息之前添加一个自定义字符串:
echo "text " | cat - $COMMIT_MSG_FILE > /tmp/out && mv /tmp/out $COMMIT_MSG_FILE
不幸的是,每条提交消息都包含“文本”,然后是 CRLF,其余的提交消息在下一行。例如,如果提交消息是:"Commit 123"
,则新的提交消息将是
"text
Commit 123"
而不是"textCommit 123"
,这就是我想要的。
知道我缺少什么吗?
解决方案
echo
打印换行符。使用不使用的命令:这可能是echo -n
,取决于您的echo
年份,或者printf
,如果您有它,将执行以下操作:
echo -n "text " | cat - $COMMIT_MSG_FILE > /tmp/out && mv /tmp/out $COMMIT_MSG_FILE
dGot14U 使用命令替换的方法也有效。考虑使用 in-place sed
:
sed -i '' '1s/^/text /' $COMMIT_MSG_FILE
是否以及何时-i
需要单独的空字符串参数''
,如此处所示,取决于操作系统:MacOSsed
需要一个,Linuxsed
禁止一个。我在脚本中使用了这个:
if sed --version >/dev/null 2>&1; then
# apparently this is gnu sed, so -i requires the extension attached
sedinplace="-i"
else
# apparently this is BSD/MacOS sed, so -i requires a separate argument
sedinplace="-i ''"
fi
# ...
sed $sedinplace -e cmd1 -e cmd2 $file
然后$sedinplace
扩展到正确的事情。
推荐阅读
- typescript - firebase 函数错误:在本地服务时找不到模块,在以前工作的项目中出乎意料
- machine-learning - 关于流形学习中的非线性运算
- string - 为什么 golang bytes.Buffer 会这样?
- forms - 带有查询生成器的表单
- python - 进行预测时如何处理未包含在训练集中的标签
- node.js - 渲染返回的 html 代码以显示为视图
- google-cloud-platform - 是否支持 GCP Firestore 原生模式导出到 BQ 导入?
- c++ - 尽管明确说明了返回类型,但对 lambda 的调用是模棱两可的
- c# - 带有十年日历的 DatePicker 仅选择年份
- c# - 如何在 MS Teams 中诱导“查看更多”以获取长 Bot 响应