我想在每次成功构建后自动使用增加的内部版本号进行新的提交。
我使用这种未经跟踪的自我修改脚本:
let N=`tail -n 1 $0`+1
sed -i '' "5s/.*/$N/" $0
echo $N
exit 0
0
在每次调用时,它会增加最后一行的数字并回显它,并且作为我的makefile的一部分,我这样做:
git commit -m "build `sh script.sh`"
对此有更好,更优雅的解决方案吗?我的解决方案可能会出现哪些问题?
编辑:
感谢您的评论。我已经过度思考了这一点,并会看看建议的其他方法。
答案 0 :(得分:2)
最好将构建保留在自己的文本文件中,并使用于维护文件的脚本保持不变而不是更改它。
#!/bin/bash
# Initialize build.txt if it doesn't exist
if [[ ! -f build.txt ]]; then
echo 0 >> build.txt
fi
let build=$(cat build.txt)+1
echo $build > build.txt
echo $build
不写自修改代码的原因?它更难以推理,看起来它自我修改的事实是阻止你检查它。另外根据我的经验,一个错误最终可能会将脚本缩减为空文件。 See also
那就是说,我认为你应该利用Jenkins之类的东西来管理你的构建号码。它不会使提交跟踪成功的构建,但界面将显示成功和不成功的构建。
我反对一般自动提交,当然在这种情况下你的版本历史会变得混乱,因此无法看到真正的变化。同样,Jenkins这样的工具会以更合适的方式向您提供这些信息,而这正是我期望找到的。
答案 1 :(得分:2)
如果您标记您的版本(无论如何这是一个好主意),您只需使用git describe --tags
生成内部版本号。
来自我自己的一个存储库的示例;
> git describe --tags
1.10-99-g6928bd0
这意味着在标记1.10
之后,已完成99次提交。 HEAD的简短commit-id为6928bd0
。
如果你不想要HEAD,你可以做类似的事情;
> git describe --tags | awk -F '-' 'BEGIN {OFS="-"} {print $1, $2}'
1.10-99