gpt4 book ai didi

Git Pre-Commit 使用sed 动态注入(inject)分支名

转载 作者:太空狗 更新时间:2023-10-29 13:59:09 26 4
gpt4 key购买 nike

我正在使用 git 预提交钩子(Hook)来:

  1. 获取当前分支名称
  2. 将分支名称插入到构建状态图像代码中
  3. 在 README.md 文件中搜索字符串/模式,然后使用该字符串/模式作为我要插入动态生成的构建状态图像的位置的标记。

请注意,我使用的是 OSX El Capitan v10.11.5,为了执行此代码,我必须在预提交脚本上运行 chmod +x .git/hooks/pre-commit

这是我正在使用的代码:

#!/bin/bash

function git_branch {
git rev-parse --abbrev-ref HEAD
}

branch=$(git_branch)
id="{{CODESHIP_CODE}}"

codeship_build_status="[ ![Codeship Status for ExampleUser/exampleRepo](https://codeship.com/projects/a99d9999-9b9f-9999-99aa-999k9b9b0999/status?branch=$branch)](https://codeship.com/projects/999999)"

sed -i -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md

截至目前,代码可以正常工作。我的意思是:

  1. 正确搜索README.md文件
  2. 删除字符串/模式标记
  3. codeship_build_status 变量替换字符串/模式标记。

问题是这似乎并没有在 git commit 之前实际更改 README.md 文件,而是生成另一个名为 README.md-e 的文件

当我转到 git push 并查看 repo 中的代码时,README.md 文件尚未更新,而是仍然包含字符串/模式标记而不是更新的构建状态图像。具有讽刺意味的是,README.md 文件确实在我的本地开发分支中发生了更改。

关于如何解决此问题或可能导致此问题的原因有什么想法吗?

最佳答案

问题是 sed -i。这告诉 sed 创建一个新文件,并使用新名称保留旧文件,使用下一个参数(在您的情况下为 -e)作为后缀。

对于 sed 的 Mac 版本,您必须-i 提供限定参数。为了使 gnu/linux 版本使用这些命令行选项执行相同的操作,您需要提供一个空白选项,如下所示:

sed -i '' -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md

关于Git Pre-Commit 使用sed 动态注入(inject)分支名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com