【问题标题】:Why is git describe picking out the tag that it does为什么 git describe 会挑选出它所做的标签
【发布时间】: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 的几乎相同的图表 - 与与masterproduction 分支无关的提交丢失。 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


【解决方案1】:

@TTT 在他的评论中回答:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2019-04-04
    • 2014-10-16
    • 1970-01-01
    • 2018-03-13
    • 2018-03-20
    相关资源
    最近更新 更多