如何从 BitBucket 设置 git 部署到登台和生产,这样他们就没有工作树?

How to set up git deployment to Staging and Production from BitBucket so they don't have working trees?

我们有一个包含 'develop' 和 'master' 分支的存储库。我设置了它,以便将新提交从我的机器推送到开发分支。我目前是唯一的开发人员,但希望将来有更多。我在我的机器上为新功能创建一个分支,进行开发,提交并合并该分支以在我的机器上开发,然后在 Bit Bucket 存储库中推送开发。然后我将代码推送到我们的登台服务器。这是当前设置的。

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

同样,一旦验证了登台服务器上的代码,我需要将代码从 Bit Bucket 存储库中的 'develop' 合并到 'Master',并从 [=27] 推送到生产服务器=] 以与我推动 Staging 类似的方式。一切都简单干净。我还没有准备好使用挂钩进行自动化推送。

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

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

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

注意:这是一个 Laravel 8.41.0 框架,在 Centos 8 机器上带有 PHP 8.0.8。

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

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

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

但是,如果您想暂时坚持基于 git 的部署,请考虑以下事项:

  • 使用普通克隆;如上所述,裸克隆是没有用的
  • 使用 git reset --hardgit clean -fd 确保代码“干净”(但首先要了解它们的作用,如果它们不适合您,请不要怪我)
  • 使用 git pull -ff-only 更新代码,这样如果您不小心在“已部署”的克隆之一中提交了某些内容,就会收到错误消息
  • 110% 确保 .git 目录无法从网络访问,任何人都无法访问其内容