【发布时间】:2021-09-21 20:52:07
【问题描述】:
我正在为我正在为其工作的公司开发一个内部 Web 应用程序。它托管在一个私有的 github 存储库上,但我的大部分开发工作都是在我家里的 linux 桌面上完成的,为此的 Web 服务器托管在公司办公室的一个小树莓派上。它本质上是 nginx 前端将 /api url 代理到 pm2 支持的 nodejs 应用程序。
我通过git pushing 从我家部署到 github 存储库,git pulling 在服务器中的生产分支上部署。 git hook post-commit 脚本在临时停止生产 api 服务器之前在构建目录中运行 npm 安装,复制 node_modules 目录并运行脚本,该脚本本质上执行 git describe --abbrev=0 --tags 以获取版本号并将其存储在 @ 987654329@ 文件,用于生产服务器向客户端宣布其版本。
如果我在家里运行 git describe,它会给出版本 v4.2.2,但在诊所我会得到 v4.1.17,但我不明白为什么
在下图中,左侧部分是我的家庭存储库中gitk --all 的输出,并且在诊所中只有终端访问权限,您可以从右侧部分看到使用git log 的几乎相同的图表 - 与与master 或production 分支无关的提交丢失。 v4.2.2 只需要两次提交,而 v4.1.17 至少需要 10 次。
为什么 git describe 会这样?
编辑:我有点知道答案 - 在服务器上有一个提交后挂钩,最终在分支上进行了提交,即使它不应该这样做 - 它只是应该在开发机器。
【问题讨论】:
-
这可能与 Git 如何在合并提交中对父级排序有关。我不确定
git describe是否总是跟随第一个父母或其他什么?将深入研究文档,看看我能找到什么。 -
旁注,问题的原因可能是您希望服务器本地
production分支与您的主分支相同,但事实并非如此。因此,每次拉取时,它都会进行新的合并提交。也许服务器应该推出它的版本(如果你想保留它),或者,也许服务器应该使用git fetch && git reset --hard @{u}而不是git pull来获取最新版本。 (如果服务器不应该自己提交。) -
很难,嗯,描述
git describe的真正工作原理。但是对@Chris 的简短评论,git describe不只是默认遵循第一父级;请参阅this question 及其答案。 -
@TTT 你解决了这个问题。几个版本之前,我的构建脚本中有一个错误,它在生产服务器上进行了自己的提交——应该只在我的开发环境中这样做。 git reset --hard origin/production 修复了它
-
@TTT 我现在已经通过硬重置原产地/生产来完全整理好东西。我已经知道你的问题的答案了。如果我记得 4.1.17 是 34 次提交,而 4.2.2 是在 70 年代。
标签: git git-describe