在部署期间将git版本号插入文件中

Jam*_*rke 12 git fabric

我认为我应该做的相当简单,但我似乎无法弄清楚如何让它发挥作用.

我想在html和javascript文件中嵌入一个唯一的版本号,原因有两个.第一个原因是我想确保在加载javascript文件时,如果有新版本,系统不会尝试使用缓存,但如果我可以使用像

 <script src="/app.js?v1.0.1-1-95425234"></script>
Run Code Online (Sandbox Code Playgroud)

我几乎肯定能确保这一切都不会发生.第二个原因是我的远程错误记录,最好知道系统的哪个版本有错误,这样我就可以适当地修复它,但不必在每次部署时手动更新这个版本号.

git describe一路走来,我认为它的输出值非常适合这个.

基本上我想在我的javascript和html文件中取一个键,GIT-CURRENT-VERSION并将其替换为输出git describe

我正在使用fabric作为我的部署方法,所以在我们抓住最新版本的git之后,这在服务器端会很有意义.

我怀疑这里有一些组合sed并且grep可以解决这个问题,如果我能找到一个内衬,那么添加到我的部署脚本会非常容易.

提前致谢!

gpo*_*poo 9

我从来没有听说过fabric,但如果面料使用(或调用)git archive,那么你可以使用gitattributes.也就是说,您可以将HTML文件包含在以下内容中:

<script src="/app.js?$Format:%H$"></script>
Run Code Online (Sandbox Code Playgroud)

并在.gitattributes存储库的顶部:

*.html    export-subst
Run Code Online (Sandbox Code Playgroud)

然后,无论何时创建存档git-archive,$Format:%H$都将被提交的哈希替换.您可以使用任何可用的与--pretty-formatgit-log.

检查的手册gitattributes,或好得多:章" 8.2自定义的Git - Git属性 "临Git的书,以获得更多的想法.


Mar*_*air 5

您可以从已部署的git树的根目录执行以下操作:

export VERSION="$(git describe)"
find . -type f -print0 | xargs -0 sed -i "s/GIT-CURRENT-VERSION/$VERSION/g"
Run Code Online (Sandbox Code Playgroud)

(这只是粗略的测试 - 谨慎使用.)

请注意,这将使您的树具有本地修改.