3

我一直在使用 cron 作业对Magento站点进行编码来处理备份,但是在尝试恢复到该站点的先前版本时它变得有点笨拙。我基本上必须挖掘备份并手动恢复。我已经阅读了 git,我喜欢能够在整个开发周期中记录我的更改并恢复到我通过一些命令更改的特定内容的想法。

目前我在本地仓库中有两个分支(master,develop)。我基本上在开发分支中进行所有开发,并在完成一组特定任务后将所有内容合并到主分支,并将内容推送到我的 gitbucket 存储库以用于备份目的,只是为了养成使用的习惯远程回购。

我是 git 新手,所以这对于我的场景来说是否足够,或者任何人都可以为使用 git 和 Magento 的单人店推荐一个好的工作流程?谢谢。

4

1 回答 1

11

我们使用GitFlow模型进行 Magento 开发。它与您的相似,但有一个用于临时站点的额外分支。更大的开发任务/修复也在单独的分支中完成,以确保开发始终相当稳定。我们的暂存站点是一个 git repo,其中已签出暂存分支,而生产站点已签出主分支。当我们准备好将更改部署到 staging 时,我们将它们合并到本地机器上的 staging 中,然后推送到中央 git 存储库,然后拉到服务器上。效果很好,但你需要小心 app/etc/local.xml 因为这在每个环境中应该是不同的。您还需要确保媒体和 var 文件夹等内容不会出现在您的 git 存储库中。

Github为 Magento 发布了 .gitignore,但我遇到的问题是它排除了所有 Magento 核心文件。您最终会得到一个干净整洁的存储库,其中仅包含您的更改,但不包含可部署的内容。我们使用了一个更简单的 .gitignore,它基本上只排除了 media var 和 app/etc/local.xml。我们通常使用单个远程(例如 Github)并从那里进行部署。

在我们要部署到的服务器上,我们通常具有 shell 访问权限并安装了 git,因此部署只是从普通远程 ssh 进入并运行 git pull(或 fetch & merge)的问题。

我们在 git 中将临时站点维护为一个单独的分支,并以相同的方式部署它们。所以我们的过程看起来像在特性分支中开发并在完成后合并到“开发”中。集成测试完成后,将“开发”(或精选更改)合并到“暂存”并部署。当准备好生产时,将“暂存”(或挑选个别更改)合并到“主”分支。这基本上是GitFlow,但“准备发布”分支是长期存在的。

正如评论中链接的Sonassi 教程所指出的,符号链接媒体的问题是,如果您从生产中删除媒体文件,您会在登台中获得断开的链接,反之亦然。我们没有将两者联系起来,而是从 git 更新暂存代码,但另外分别运行暂存和生产站点。如果我们在暂存中需要新数据,出于任何原因,我们将获取生产媒体和数据库的副本并将其恢复到暂存站点。

Gitflow 模型使用版本号作为发布标签,如果您有团队同意发布的版本号,请使用它们。否则,如果你有某种里程碑计划,或者你正在努力的 sprint 系统,并且可以通过这种方式确定一个版本,那也可以。如果一切都失败了,我们将使用部署发生的日期/时间。例如

git tag -a deployed-`date +%Y%m%d-%H%M` -m "Code release at `date`"
于 2012-09-03T00:36:30.430 回答