我通过从家里将代码git push
到github存储库,再在服务器上git pull
生产分支来部署。一个git hook
post-commit
脚本会在构建目录中运行npm install,然后暂时停止生产api服务器,复制node_modules目录并运行一个脚本,该脚本本质上执行git describe --abbrev=0 --tags
以获取并存储版本号到.env
文件中,以便生产服务器向客户端宣布其版本。
如果我在家中运行git describe,则会得到版本v4.2.2
,但在诊所中我得到v4.1.17
,我不知道原因。
gitk --all
的输出结果,在诊所中只有终端访问权限,你可以从右侧部分看到几乎相同的图形,使用git log
- 没有与master
或production
分支无关的提交。 v4.2.2仅相差两个提交,而v4.1.17至少相差10个提交。
为什么git描述会表现出这样的行为?
编辑:我有点知道答案了 - 在服务器上有一个后提交挂钩,最终在分支上做了一个提交,尽管它本不应该这样做 - 它只应该在开发机器上进行。
git describe
是否始终遵循第一个父级或其他什么规则?我会查阅文档,看看能找到什么信息。 - Chrisproduction
分支与你的主分支相同,但实际上它们并不相同。所以每次服务器进行拉取时都会创建一个新的合并提交。也许服务器应该推送它的版本(如果你想保留它),或者,服务器应该使用git fetch && git reset --hard @{u}
获取最新版本,而不是使用git pull
。(如果服务器不应该进行自己的提交。) - TTTgit describe
的工作原理。但是对于@Chris的简短评论,git describe
默认不仅遵循第一个父级;请参见此问题及其答案。 - torek