Git + Drupal 工作流程

6

我是一个Git的初学者,有一些工作流程上的问题。我学会了很多命令,也知道如何使用,但似乎无法找到正确的工作流程。希望能得到一些建议。(注:我的项目只有我一个开发人员)

  1. 我的朋友曾告诉我最好在实时服务器上工作,而不是在本地主机上工作,以避免遇到环境特定问题。这是真的吗?

  2. 我为所有Drupal网站使用相同的基础主题。当我在其中一个网站上进行更改时,我目前需要将其复制并粘贴到其他10个位置。有没有办法将此基础主题保留在一个位置,并让其他网站从中获取?Github可以吗?

  3. 如果我想要对代码库和数据库进行“完整”备份,唯一的方法是导出数据库为SQL文件并提交整个内容吗?

感谢帮助!

Terry

4个回答

5
  1. 通常情况下,您应该在与生产服务器尽可能接近的服务器上运行测试,但不要在实际的现场服务器上进行测试,因为这会在测试期间破坏实时网站。由于Drupal旨在在各种服务器上良好运行,因此使用类似的服务器并不是很相关。

  2. 您应该使用git pull而不是复制粘贴。因为git具有分散式设计,您实际上不需要像github这样的中央位置。如果对您的工作流程有用,请使用它,否则,您可以直接从一个服务器拉到另一个服务器。

  3. Drupal在数据库中存储大量配置信息并保持同步的解决方案并不完美。同步整个数据库是一种方法。许多模块还具有可导出性,基本上将数据库中的数据保存到代码中,以便您可以将其与其余代码一起同步。 Features 可能是尝试导出模型并查看是否适合您的最简单方法。


感谢您的回复,Scott。所以基本上,对于#2(多个站点使用相同的基础主题),我应该:
  1. 在/themes/base-theme某处创建git仓库
  2. 在此处进行所有更改/编辑
  3. 在所有子域中克隆此存储库
  4. 将更改拉到子域
再次感谢,Terry
- saltcod
我会把1改成/sites/all/themes/base-theme,其他都可以。通常最好将自定义内容放在根主题和模块目录之外,这样可以更轻松地升级Drupal本身。 - Scott Reynen
我同意Scott的所有答案,但我认为可以将整个网站(包括数据库)放入Git中。有关完整的撰写,请查看:http://www.opc.com.au/web-development/drupal-release-management-drush-and-git 声明:我写了这篇文章。@markdorison也提出了使用Strongarm和Context模块的好建议。 - Horatio Alderaan

2
  1. 我理解你朋友的观点,但我坚决反对在生产服务器上运行(可能是)有问题的开发代码。最好下载VirtualBox并设置与部署服务器相同配置的虚拟机。使用git为每个部署版本创建“标签”,这样您就可以获得网站“版本”的有用参考点。
  2. 看看“git子模块”。您几乎肯定需要了解这些内容,但如果您来自subversion背景,您可能会发现它们非常令人困惑。子模块基本上是对其他存储库的引用,因此您在主项目中具有到另一个项目的软链接。但是,它们必须在目录中是自包含的。
  3. 我个人喜欢在我的存储库中保留schema.sql文件(只是一个空的SQL架构),但我认为保留完整数据库备份不是明智之举,即使您可以这样做。请将其分开保存。

如果您对版本控制系统的整个概念都很新,请直接跳入其中。随着您的学习,一切都会开始变得清晰明了。当然,根据其本质,您不太可能造成任何永久性损害,因为您可以回滚和前进。

一个坚定的建议:频繁提交。每次您进行有效更改时,请进行提交。与大型提交相比,较小的提交要容易得多。例如,如果您需要撤消有问题的更改,则在原子提交中,您更有可能能够撤消它,而无需删除同时提交的大量工作代码。


1

为了定期转储Drupal数据库,我使用:

a) 一个Git别名来创建一个名为“db”的空的未连接分支。在http://gist.github.com/360294中找到该别名。

b) 使用伟大的Maatkit工具执行以下命令,清空一些不感兴趣的表并将数据库转储到单独的文件中,不包含注释。

mk-find DBNAME --tbllike "cache%" --exec "TRUNCATE %D.%N"; 
mk-find DBNAME --tbllike "watchdog" --exec "TRUNCATE %D.%N"; 
git checkout db && \
cd /GITROOT/db && rm -rf * && \
mk-parallel-dump -d DBNAME -- mysqldump --skip-extended-insert --skip-comments --skip-lock-tables '%D' '%N' \> '%N.sql'

0
  1. 一般来说,您的环境越接近越好。当尝试诊断和跟踪问题时,这变得尤为重要。并不是说在每个环境(开发、QA、生产等)中都不能有不同的设置,但如果可能的话,保持一致肯定是更可取的。

  2. 为共享主题设置git存储库是一个很好的想法,可以消除复制/粘贴更改所固有的问题。无论您是在自己的服务器上设置git存储库还是使用像github这样的服务,都是纯粹个人喜好的问题。

  3. 是的,为了备份绝对所有内容,您需要对数据库进行sqldump,除了拥有代码存储库。也就是说,要大量使用Features模块,并尽可能多地将配置放入代码中。这在移动环境之间以及能够跟踪您的更改版本与其余代码一起使用时也很有帮助。添加到功能中的最重要的项目之一将是内容类型、视图、权限、变量(通过Strongarm)、块放置(通过Context)、菜单等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接