git - 如何从 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 框架。
解决方案
你需要的是与裸仓库相反的:裸仓库包含git 数据库(版本历史),但没有签出代码;您想要的是代码的特定快照(git clone 的工作副本部分),而不是版本历史记录。
更根本的是,您的问题是您正在尝试将 git 用作部署工具,而它并不是为此而设计的。
您需要的是从 BitBucket 发布代码,只保留代码,并将其部署到您的服务器,替换任何以前的代码。您可以完全自己编写脚本,也可以使用 Jenkins 等 CI 工具、AWS CodeDeploy 等部署系统等。
但是,如果您现在想坚持使用基于 git 的部署,则需要考虑以下事项:
- 使用普通克隆;如上所述,裸克隆是没有用的
- 使用
git reset --hard
andgit clean -fd
确保代码是“干净的”(但首先要了解它们的作用,如果它们不完全适合您,请不要怪我) - 用于
git pull -ff-only
更新代码,以便在您不小心在“已部署”克隆之一中提交某些内容时出现错误 - 确保 110% 确保该
.git
目录无法从 Web 访问,并且任何人都无法访问其内容
推荐阅读
- r - 如何将 RStudio 控制台中打印的内容转换为文档?
- python - 为什么无法检测给定的地理坐标点是否在路线中
- python-3.x - 将方法转发到包装类
- php - 如何使用 PHP 中的 sort 函数按顺序列出数组的值
- java - 如何在 RecyclerView 中准确显示 5 个项目
- android - 如何将捕获的图像发送到 Apache 服务器?
- javascript - 三.js | 导入的 Blender 模型就像以低质量渲染
- mysql - 如何找到只有男性顾客的店铺?
- javascript - 你能解释一下这段 JavaScript 代码的含义吗?
- javascript - 如何使用 javascript 在单独的 html 页面上显示答案?