如何从 BitBucket 设置 git 部署到暂存和生产,以便它们没有工作树?



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

在登台服务器上将没有开发,所以我不需要工作树(是吗?)我只是想让它简单-将代码推到暂存和更改合并到现有的代码。如果需要对暂存版中的代码进行一些修正,那将在我机器上的原始功能分支中完成,然后提交,合并并推送到Bit Bucket上的"开发",然后再次推送到暂存版。 同样,一旦验证了登台服务器上的代码,我需要将代码从Bit Bucket repo中的"开发"合并到"主",并以类似的方式从"主"推送到生产服务器,就像我推送到登台一样。一切都简单而干净。我还没准备好研究带挂钩的自动推杆。

我遇到的一个小故障是生产服务器代码是来自另一台机器的图像,因此它目前有很多"更改"。两个"modified"one_answers";new"这不是真正的变化,而是旧代码。我在登台服务器上使用

成功地处理了类似的情况:
git fetch --all
git reset --hard origin/develop

我的主要问题是关于我应该在登台和生产服务器上使用的git实例的类型。它们应该是光着的吗?我认为我对工作树没有任何用处,因为在任何服务器上都不会有开发,但我不知道裸安装是否包含了一个活动服务器所需的一切。

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

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

更根本的是,你的问题是你试图把git作为一个部署工具,而它并不是为这个目的而设计的。

你需要的是一些东西,它将从BitBucket获取代码的一个版本,保持只是代码,并将其部署到你的服务器,取代任何以前的代码。你可以完全自己编写脚本,或者你可以使用像Jenkins这样的CI工具,像AWS CodeDeploy这样的部署系统,等等。

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

  • 使用正常克隆;裸克隆是没有用的,如上所述
  • 使用git reset --hardgit clean -fd确保代码"干净";(但首先要理解它们是做什么的,如果它们不完全适合你,不要怪我)
  • 使用git pull -ff-only来更新代码,这样你就会得到一个错误,如果你不小心在一个"部署"的;克隆
  • 确保110%的.git目录无法从web访问,并且任何人都无法访问其内容

相关内容

最新更新