3

这与我的安全问题有点相关。将 hg / mercurial 存储库用于实时网站是不是一个坏主意?如果是这样,为什么?

此外,我们有我们网站的开发、测试和生产安装,dev.example.com例如test.example.comwww.example.com. 如果将存储库用于实时/生产网站是一个坏主意,那么可以将 hg 存储库用于开发和测试站点吗?

我还担心易于部署。我们有技术和技术较少的同事将与该站点一起工作。技术人员(软件工程师)使用命令行或 TortoiseHG 不会有任何问题。我更关心技术含量较低的人(网页设计师)。他们不会习惯在命令行上工作,甚至可能会觉得 TortoiseHG 令人望而生畏。这些同事主要将.css文件和图像上传到服务器。我希望这些文件(至少是.css文件)受版本控制,但我希望这对非技术团队成员尽可能透明。

实现这一目标的最佳方法是什么?

编辑:我们的“站点”实际上是一个多站点 CMS 设置,具有一个主存储库和几个子存储库。存储库结构的模型:

/root [main repository containing core files and subrepositories]
    /modules [modules subrepository]
    /sites/global [subrepository for global .css and .php files]
    /sites/site1 [site1 subrepository]
    ...
    /sites/siteN [siteN subrepository]

软件工程师将在root,modulessites/global存储库中工作。技术较少的人(网页设计师)只能在site1...siteN子存储库中工作。

4

4 回答 4

4

是的,这是个坏主意。

不要将您的存储库作为您的网站。这意味着签入但无法正常工作的东西将立即可用。这意味着意外签入(它发生)也将被实时反映(即不属于那里的文档等)。

然而,我实际上使用我编写的工具解决了这个“概念”(源代码控制作为部署)(其他一些公司现在也在解决这个主题,所以你会看到更多)。我的是 SVN(目前),所以它不是特别相关;我提到它只是为了表明我之前已经考虑过这一点(虽然不是在存储库中;一个工作副本,在这种情况下答案是相同的:最好将非版本化的“免费”作为网站目录,并且自动(通过用户操作)将“版本化”数据复制到该目录)。

于 2010-03-02T08:29:50.243 回答
4

许多人将他们的站点保存在存储库中,只要您没有人实时编辑实时站点就可以了。有一个暂存/开发区域,您的非修订控制人员在其中进行更改,然后让对 RCS 更友好的人定期执行 commit-pull-merge-push 周期。

只要这是评判人员执行暂存区->生产-回购推送的有意识行为,就可以了。您甚至可以在生产克隆中放置一个钩子,该钩子会自动对该生产克隆中的工作目录执行“hg update”,因此只需“推送”即可部署。

也就是说,我认为您低估了您的网络团队或 tortoiseHg;他们可以得到这个。

于 2010-03-02T14:55:54.687 回答
2

我个人(我是一个 1 人团队),我非常喜欢将 src 控件用作实时网站的想法。hg 更是如此,然后是 svn。

在我看来,您可以使用单个 cmd 加载整个站点(添加/删除文件)比 ftp/ssh 这个、删除那个等要容易得多

如果您使用的是 apache(也可能是 iis),您可以制作一个简单的 .htaccess 文件,该文件将阻止所有 .hg 文件(如果您使用的是 svn,则为 .svn)

我首选的结构是开发站点位于直接从存储库运行的本地计算机上(这里实际上不需要安全性,根据需要做你喜欢的事情)

登台/测试机器是一个单独的盒子或虚拟机,运行最新的实时数据库副本(我有一个脚本可以将提交的更改推送到登台服务器并运行测试)

现场机器(打开 ssh 连接,将更改推送到现场服务器,再次测试,都可以很容易地编写脚本,例如谷歌)

由于 hg 的推/拉特性,这意味着您可以提交更改和测试,而不会有将损坏的构建推送到实时网站的危险。就像您在评论中所说的那样,只有特定的人应该有权将版本推送到实时站点。(如果失败,您应该可以通过 src 控制轻松恢复到以前的版本)

于 2010-04-12T07:49:16.743 回答
0

为什么不让 repo 也成为活动的 Web 服务器(无论如何用于开发或测试/QA 环境)?

这是我想要实现的:

  • 开发人员拥有本地测试环境,他们可以在其中构建和测试他们的代码
  • 开发人员在他们的本地开发机器上克隆开发环境
  • 开发人员尽可能频繁地提交本地存储库
  • 完成并测试大量工作后,开发人员将工作更改集推送到开发存储库

更改将在 Dev 上合并和测试,然后推送到 Test/QA,等等。

顺便说一句,我们正在使用 Mercurial。我相信这个模型只能使用分布式源代码管理工具。

于 2010-12-10T16:55:45.150 回答