首页 > 解决方案 > 如何从 BitBucket 将 git 部署设置为暂存和生产,这样它们就没有工作树?

问题描述

我们有一个包含“开发”和“主”分支的仓库。我已经设置好了,以便我将新的提交从我的机器推送到开发分支。我目前是唯一的开发人员,但希望将来会有更多。我在我的机器上为新功能创建一个分支,进行开发、提交和合并该分支以在我的机器上开发,然后在 Bit Bucket 存储库中推送开发。然后我将代码推送到我们的暂存服务器。这是目前设置的。

暂存服务器上不会有任何开发,所以我不需要工作树(是吗?)。我只想简单——将代码推送到 Staging 并将更改合并到现有代码中。如果需要对 Staging 中的代码进行一些更正,这将在我机器上的原始功能分支中完成,并提交、合并并推送到 Bit Bucket 上的“开发”,然后再次推送到 Staging。

同样,一旦验证了暂存服务器上的代码,我需要将代码从 Bit Bucket 存储库中的“开发”合并到“主”中,并以与我推送类似的方式从“主”推送到生产服务器到分期。一切都简单而干净。我还没有准备好使用钩子实现推送的自动化。

我遇到的一个问题是生产服务器代码是来自另一台机器的图像,因此它目前有很多“更改”,包括“修改”和“新”,它们并不是真正的更改,而是旧代码。我使用以下方法成功处理了暂存服务器上的类似情况:

git fetch --all
git reset --hard origin/develop

我的主要问题是关于我应该在登台和生产服务器上拥有的 git 实例的类型。他们应该裸露吗?我认为我对工作树没有用处,因为两台服务器上都没有开发,但我不知道裸安装是否包含实时服务器所需的一切。

注意:这是在 Centos 8 机器上使用 PHP 8.0.8 的 Laravel 8.41.0 框架。

标签: gitbitbucket

解决方案


你需要的是与裸仓库相反的:裸仓库包含git 数据库(版本历史),但没有签出代码;您想要的是代码的特定快照(git clone 的工作副本部分),而不是版本历史记录。

更根本的是,您的问题是您正在尝试将 git 用作部署工具,而它并不是为此而设计的。

您需要的是从 BitBucket 发布代码,只保留代码,并将其部署到您的服务器,替换任何以前的代码。您可以完全自己编写脚本,也可以使用 Jenkins 等 CI 工具、AWS CodeDeploy 等部署系统等。

但是,如果您现在想坚持使用基于 git 的部署,则需要考虑以下事项:

  • 使用普通克隆;如上所述,裸克隆是没有用的
  • 使用git reset --hardandgit clean -fd确保代码是“干净的”(但首先要了解它们的作用,如果它们不完全适合您,请不要怪我)
  • 用于git pull -ff-only更新代码,以便在您不小心在“已部署”克隆之一中提交某些内容时出现错误
  • 确保 110% 确保该.git目录无法从 Web 访问,并且任何人都无法访问其内容

推荐阅读