Git 使用 Sed 预提交动态注入分支名称
Git Pre-Commit Using Sed To Dynamically Inject Branch Name
我正在使用 git
预提交挂钩:
- 获取当前分支名称
- 将分支名称插入构建状态图像代码
- 在 README.md 文件中搜索 string/pattern,然后使用该 string/pattern 作为我要插入动态生成的构建状态图像的位置的标记。
请注意,我使用的是 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="[ ](https://codeship.com/projects/999999)"
sed -i -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md
截至目前,代码可以正常工作。我的意思是:
- 正确搜索 README.md 文件
- 删除 string/pattern 标记
- 用
codeship_build_status
变量替换 string/pattern 标记。
问题是这似乎并没有真正改变 git commit
之前的 README.md 文件,而是生成另一个名为 README.md-e [=17] 的文件=]
当我转到 git push
并查看存储库中的代码时,README.md 文件尚未更新,而是仍然包含 string/pattern 标记而不是更新的构建状态图像.具有讽刺意味的是,README.md 文件确实在我的本地开发分支中发生了变化。
关于如何解决此问题或可能导致此问题的原因有什么想法吗?
问题是sed -i
。这告诉 sed
创建一个新文件,并使用新名称保留旧文件,使用下一个参数(在您的例子中,-e
)作为后缀。
对于 sed
的 Mac 版本,您 必须 为 -i
提供限定参数。要使其与 gnu / linux 版本使用这些命令行选项执行相同的操作,您需要提供一个空白选项,如下所示:
sed -i '' -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md
我正在使用 git
预提交挂钩:
- 获取当前分支名称
- 将分支名称插入构建状态图像代码
- 在 README.md 文件中搜索 string/pattern,然后使用该 string/pattern 作为我要插入动态生成的构建状态图像的位置的标记。
请注意,我使用的是 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="[ ](https://codeship.com/projects/999999)"
sed -i -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md
截至目前,代码可以正常工作。我的意思是:
- 正确搜索 README.md 文件
- 删除 string/pattern 标记
- 用
codeship_build_status
变量替换 string/pattern 标记。
问题是这似乎并没有真正改变 git commit
之前的 README.md 文件,而是生成另一个名为 README.md-e [=17] 的文件=]
当我转到 git push
并查看存储库中的代码时,README.md 文件尚未更新,而是仍然包含 string/pattern 标记而不是更新的构建状态图像.具有讽刺意味的是,README.md 文件确实在我的本地开发分支中发生了变化。
关于如何解决此问题或可能导致此问题的原因有什么想法吗?
问题是sed -i
。这告诉 sed
创建一个新文件,并使用新名称保留旧文件,使用下一个参数(在您的例子中,-e
)作为后缀。
对于 sed
的 Mac 版本,您 必须 为 -i
提供限定参数。要使其与 gnu / linux 版本使用这些命令行选项执行相同的操作,您需要提供一个空白选项,如下所示:
sed -i '' -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md