2011-05-05 52 views
14

首先,我很抱歉这个问题的规模很大,因为我确信我提出的是一个实施方面的“重大事项”,可能是三到四个单独的问题本身。我不会问我是不是非常需要帮助。一个Sitecore站点的Git源代码控制策略

我已经接受了修改公司关于在线工作的风险管理程序的巨大任务。因为我们没有备份,也没有保护我们的数据,所以我决定像任何参与专业编程的人都应该做的那样,我们将通过源代码控制来保护我们的工作。我目前使用Git在本地进行此操作,但其他人不使用源代码控制,最终我们失去了源代码控制提供的许多好处。我宁愿我们有一个系统,每个人都使用Git,并强制规定如果它不在源代码控制中,它不会停留。显然,我们需要一个备份计划,但作为一名开发人员,我认为首先要做的是在对备份解决方案进行排序之前,先对事物的编码方面进行分类 - 显然,任何有关这方面的建议都非常值得欢迎。

我们运行一个带有SQL Server 2005后端的ASP.NET网站,运行Sitecore作为我们选择的CMS。在一个理想的世界中,我希望在源代码控制下包含该数据库的所有不断变化的部分。

目前,我知道这不是最好的想法,我为Sitecore中构建的所有子布局运行一个解决方案。这是在源代码控制之下,并感谢Git我已经能够添加分支机构,推送新功能和轻松修复错误(使用Git-flow作为我的工作流程解决方案)。尽管如此,我对Git还是比较陌生,所以我没有在提交之外管理任何过于复杂的内容,忽略某些文件等。

最重要的是,我还想使用源代码控制来获取数据库内容来源控制。据我了解,您可以将Sitecore内容项目作为文件系统中的一棵巨大树(如果我没有记错,保存为.item文件?)。如果这是理想的解决方案,我也想将这些添加到源代码控制,尽管我不知道它们将保存在文件系统中的确切位置。我的文件系统现在的问题是这样的:

- Data  (Logs, indexes, etc - is this needed to be in source control?) 
- Source (Helper files, although occasionally modified) 
- Website (Containing all the files I edit, and other essential Sitecore stuff) 

如前所述我目前的仓库只是我的系统上,它由一个单一的解决方案文件夹的带着一帮的.ascx的,.ascx.cs,的.ascx .cs.designer和奇数.aspx文件或两个。这样可以让我的生活更轻松上传,就像使用

我想输入的内容是一个管理所有开发人员的理想方法。尽管使用了DVCS,但我更愿意将实时服务器视为主要存储库,并让所有其他开发人员将其推送并从中拉出,然后互相拉取。我们将使用git-flow workflow solution,因为它符合我们良好的发展方式。显而易见,我担心的是在没有备份的情况下,在不破坏目前服务器上非常昂贵的高流量网站的情况下正确设置。

有关服务器上有多少数据粘贴到存储库中的提示和建议,关于如何处理Sitecore中的序列化数据的指导,以及如何使用源代码管理本身作为备份到单独存储的方式存储库将受到欢迎。这是我第一次为一个现场网站建立一个源代码控制系统/工作流程,所以任何关于什么对我来说是最好的事情的指导和建议都是值得赞赏的。


编辑:我打算把这个奖金,试图获得更多的指导人们如何处理Sitecore与Git。为了说明我自己,我不是在寻找一种方法来备份我的工作,而是一种方式,以便一些开发人员可以使用它并确保网站上的代码与中央存储库保持一致。例如,我之前已经提到过,我将使用git-flow来管理我的工作流程。原始回购将存在于一个共享服务器上(这可能会成为一个测试环境),所有开发人员都会克隆这些工作的克隆并推向。从这里,我希望能够将共享驱动器上的原始回购更改推送到实时服务器,并在发现错误时再次将其更改回来。我还想在我的回购中包含序列化的内容项目。修订后的问题

回答

4

修订的答案:

好吧,让我对我最初的想法展开现在当我们从您的更多背景信息。既然你说你只有一次Sitecore的许可证,并且不能有一个单独的测试服务器等,我们总是可以稍微修改一下,仍然可以达到同样的效果。

如果您在运行实时Sitecore的同一台服务器上有多个存储库,该怎么办?如果可以让Sitecore在同一文件系统上使用不同的根/存储库,例如您将网址更改为http://yoursite.com/blahblah/test以在测试模式下运行Sitecore。这取决于你有什么样的许可证,当然,如果它被绑定到特定的机器上。无论如何,在将这些东西合并到主服务器并让它正常运行之前,您可以在另一个分支上测试您的站点(例如,测试存储库中的开发分支)。

因此,您可以在服务器上拥有一个裸仓库,每个人都可以在这个仓库中进行推送。你可以在同一台服务器上有两个额外的非裸存储库,一个是主分支签出,另一个是开发分支签出。通过ssh登录,如果你想在你的Sitecore网站的测试版本上测试新的功能,你可以很容易地在测试库中运行“git pull”。当您对变更感到满意时,请合并成主人并推送给您裸露回购的主人,并以相同的方式更新现场回购。

我认为你需要尝试找到一种方法来让你的网站有两个版本,这样你就可以在他们上线之前测试这些变化。


原帖:

我强烈建议你有活的服务器,什么之间的分离你目前的工作,即另一个仓库,你把你的工作太(和拉),它的工作原理作为一个集成存储库。这样,您可以在将代码推送到实时服务器之前集成代码并在本地对其进行测试(本地到您的组织),因此没有人不小心将代码/数据库/无论直接推送到实时服务器。

我还建议您为中央存储库备份数据,换句话说,git应该用作版本控制系统,而不是备份系统。即使git可能会失败并导致存储库损坏,如果您没有任何备份,那么您将被吸引。

此外,如果可能的话,尝试将实际网站内容与逻辑上的数据分离,即尝试保持良好的模型/视图概念。这样,您可以使用独立于代码的测试数据库轻松设置测试环境,并且不需要提交数据库。除非你真的想要提交他们当然:)

+1

这将是很好的。可悲的是,我们只有运行Sitecore的一份副本的许可证,并且这些副本在现场网站上运行,所以我们无法运行一个用于开发/测试目的。这是做事最糟糕的一种方式,但是如果不花费大量的钱,我们的手显然是并列的。 – AlexT 2011-05-05 10:45:35

+0

@AlexT:Heya。请检查我的修改答案。 – ralphtheninja 2011-05-11 14:32:20

+0

感谢您的回复。我喜欢你的建议,这是我一定会研究的。但是,关于存储库本身,是否值得我坚持整个CMS,将序列化的内容放入回购库中,还是只添加可能会更改的文件? – AlexT 2011-05-16 15:36:15

10

查看HedgeHog的团队发展Soultions(3.0是最新版本)。它满足了许多与Visual Studio,Sitecore Rocks,Team City(或其他构建服务器)。请访问http://hhogdev.com/了解更多详情。

+0

听起来像是一个很棒的产品,而且我可能会考虑在未来几个月尝试和购买。然而,我更倾向于免费的解决方案,只是在服务器上处理Git的一种方式,而不是一种处理它的工具。 – AlexT 2011-05-09 08:41:17

2

当我退后一步,试图看看你在做什么时,它正在管理失去业务连续性的风险。例如如果您的网站出现故障,您最好希望能够使用备份完全自动恢复网站。

数据存储并不昂贵。真的,事实并非如此。即使你有一个庞大的数据集。因此,要求所有开发人员使用git是一个好主意。许多组织建立一个单一的git服务器,并且你只需推/拉该服务器。如果您的解决方案具有良好和完整的测试,您将很快知道代码合并是否已破坏软件。如果没有,你可能应该使用一个中央git服务器让开发人员推/拉,然后使用“git fetch”来合并&测试变更的中央服务器的单独版本集成服务器。

您列出了解决方案的各种组件,如备份代码,数据,数据库,CMS条目等。但是,您应该询问的总体问题是,您是否收集了足够的内容才能够从备份中完全激活您的站点。如果你做不到这一点,你做得不够。如果你能做到这一点,你做得足够了。

在许可问题上,您需要更好的许可证。询问Sitecore的所有者获得测试服务器的许可证,并告诉他们它是用于测试服务器的。一个好的供应商会意识到,如果他们以这种方式帮助你,你更有可能续订你的订阅。或者,向您的财务人员询问另一个Sitecore许可证。如果您的基于Sitecore的CMS网站对您的公司来说是一个很好的实用工具,那么另一个许可证不会改变这个好处。

+0

对于我在网站本身受到源代码控制的感觉,你已经在很大程度上击中了头部。完整的备份解决方案是议程中的另一个项目,但可能是另一个主题(可能是服务器故障)。我想要的是让我的网站在Git下工作,这样开发人员就可以处理代码,无论是子层布局还是渲染,然后推送到网站本身,而不用担心两个开发人员覆盖更改。此外,我希望序列化的内容项目,以防万一出错。正是这种设置,以及我有限的Git知识,让我非常担心。 – AlexT 2011-05-12 08:47:11

0

我花了一个小时了解我可以做些什么关于Sitecore(今天之前从来没有听说过它,很酷的工具),我想我明白你在做什么。下面是我该怎么做:

  1. 在Linux上设置一个幸运的裸回购(物理或虚拟,应该不重要)。
  2. 在生产环境中初始化一个git仓库,在所有源代码,配置文件和数据都可以添加到仓库的基础文件夹中。 (请记住设置一个user.name和user.email,它将标识系统管理员负责生产更新。)
  3. 为每个模式创建一个SQL Server转储文件,并将所有转储放在本地内特殊标记的文件夹中生产回购。
  4. 阶段所有文件(git add --all)并提交一个“初始提交,版本X.Y.Z”注释,其中版本号是您认为当前部署的任何内容。
  5. 推向幸运的回购。
  6. 克隆所有开发环境中的祝福回购。 (请记住设置user.name和user.email,以便在提交中进行正确识别。)
  7. 开始使用git-flow。

注意步骤3创建SQL Server转储并将其添加到回购。这将允许您回滚对数据库的任何未来更改。请记住,每次进行更改时都需要生成新的转储,但仅适用于实际更改的模式。序列化您需要序列化的内容,并提交新的序列化以及模式更改。这样,git revert {commit_hash}就是您需要恢复这些特定更改(当然,不要忘记还原数据库)。

我希望这可以帮助,直接或间接。

P.S:我不知道你的数据库结构;如果配置与用户数据存储在相同的模式中,它肯定会使事情复杂化,因为您不能在不丢失新的(并且可能是重要的)用户数据的情况下恢复先前的转储。我习惯于Ruby on Rails,其中模式修订编码为升级和降级;我希望你的框架提供了类似的功能。

+0

关于配置数据和用户数据问题,我刚刚意识到你可以简单地将数据和配置更改分成不同的提交。 'git add -p {dump_file}'使这个相对简单。借此,恢复配置提交不会影响用户数据。 – 2011-05-17 21:31:10