我们使用 Git 来管理和部署代码。我在 Ops 团队,负责部署。我们的开发人员进行更改并将代码推送到 Github,我们(Ops)使用一些托管流程来提取生产代码并进行部署。
过程是这样的:
背景
- 开发人员做事。这些东西最终出现在 Github 中,开发人员告诉我们是这样的。
- 我们有一个本地“登台”克隆和一个本地“部署”裸 git 存储库。本地 git clone 有两个遥控器,Github 为“origin”,本地裸仓库为“deploy”
- 我们在 Web 服务器上使用 chef 通过从“deploy”远程提取的 chef git 资源实际部署代码
- 我们有“部署”遥控器,因此在开发完成的东西和我们的部署时间之间有一个门控机制。(而不是直接从 Github 部署)
实际部署过程
cd into local clone
git checkout branchname
git pull origin branchname
git push deploy branchname
所有这些都是部分自动化的,并且正在转向完全自动化。因此,我们小心不要对暂存克隆进行本地更改,并且我们希望该git status
克隆的输出只会是nothing to commit (working directory clean)
但是,本周我们收到了一条奇怪的消息。部署克隆声明它提前 80 次提交!即使它也说nothing to commit
。
# On branch branchname
# Your branch is ahead of 'origin/branchname' by 80 commits.
#
nothing to commit (working directory clean)
最后,本身并没有真正的问题。此克隆中的提交 SHA256 哈希匹配,以及所有 Web 服务器上部署的代码。我没有进行实际的 rsync 比较,但我非常有信心实际代码本身已正确部署。
我想知道这是怎么发生的,如果它很糟糕,以及如何在不删除本地克隆并重新开始的情况下清理它。