3

我正在为我正在为其工作的公司开发一个内部 Web 应用程序。它托管在一个私有的 github 存储库上,但我的大部分开发工作都是在家里的 linux 桌面上完成的,为此的 Web 服务器托管在公司办公室的一个小型树莓派上。它本质上是 nginx 前端将 /api url 代理到 pm2 支持的 nodejs 应用程序。

git push我从我家通过 ing 到 github 存储库并git pull在服务器中配置生产分支来进行部署。一个git hook post-commit脚本在临时停止生产 api 服务器之前在构建目录中运行 npm install,复制 node_modules 目录并运行一个脚本,该脚本本质上git describe --abbrev=0 --tags是获取版本号并将其存储在一个.env文件中,以便生产服务器向其宣布其版本客户。

如果我在家里运行 git describe 它会给出版v4.2.2本,但在诊所我得到了v4.1.17,我不明白为什么

在下图中,左侧部分是gitk --all我的家庭存储库中的输出,并且在诊所中只有终端访问权限,您可以从右侧部分看到几乎相同的图表使用git log- 缺少与任何一个都不相关的提交masterproduction分支。v4.2.2 只有两次提交,而 v4.1.17 至少有 10 次。

为什么 git describe 的行为方式是这样的?

编辑:我有点知道答案 - 在服务器上有一个提交后挂钩最终在分支上进行提交,即使它不应该 - 它只应该在开发机器上进行.

来自我的 git repo 的复合 gitk 图

4

1 回答 1

0

@TTT 在他的评论中回答:

也许问题的原因是您希望服务器本地生产分支与您的主分支相同,但事实并非如此。因此,每次拉取时,它都会进行新的合并提交。也许服务器应该推出它的版本(如果你想保留它),或者,也许服务器应该得到最新的 agit fetch && git reset --hard @{u}而不是 with git pull。(如果服务器不应该自己提交。)

于 2022-02-02T15:20:47.100 回答