使用Git与多个提交者一起部署网站

时间:2012-09-16 16:39:53

标签: git web-deployment dokuwiki

我想在我的服务器上运行dokuwiki.org。我正在使用基于文件的设置,因此不涉及外部数据库。

我想设置一个包含dokuwiki的data目录的git存储库,这样多个提交者就可以脱机工作并在完成后推回更改。 git存储库中的data目录没什么大不了的,您可以使用dokuwiki的配置文件设置data目录的位置。

我使用this指南来设置所有内容,并且它按预期工作。

tl;指南博士:

  • 设置bare repo
  • post-receive挂钩裸仓库以导航到htdocs目录并检查bare仓库中的更改。
  • 你将某些内容推送到repo,htdocs目录会自动检出来自repo的更改。

因此,只有在将静态网站或基于数据库的网站用于指南时,该指南才有用。

我的问题是每当有人通过基于网络的维基而不是本地存储库中的文件编辑某些内容时,www目录就会被更改 - >更改不会被推回到bare存储库,因为没有挂钩/方式/ ...来做到这一点。

这里有什么我不知道的或处理这个用例的更好方法吗?

2 个答案:

答案 0 :(得分:0)

我想到的唯一一件事就是让网站本身成为一个存储库(称之为www repo),并且人们在开发人员推动之前就将其从中拉出来。您可以使用git plugin提交网站上发生的更改。

这有缺点,因为您必须更改设置挂钩的方式。基本上当有人推送到裸存储库时,你必须检查你的钩子,通过web界面进行的最后修改已经提交到www repo(这意味着它的工作树是干净的),并且被推送的提交包含它们(即他们已从网站回购中提取)。如果是,那么裸存储库的挂钩会将新提交推送到www repo。

但是我不知道这是否可行,以及git插件的质量。但是我没有看到任何其他东西让Git使用非提交的外部修改。

答案 1 :(得分:0)

有一个相当新的插件可以完全满足您的需求:gitbackend。它还支持拉入现场回购。

从您的说明中看不出来,但如果您计划“仅”更改data/pagesdata/media中的内容,您将错过对元数据的更改。这意味着几个提交只会在页面的旧版本上显示为单个修订,而其他数据(如提交消息/更改摘要)将丢失。

前面提到的插件也没有实现元数据更改,但可以在内部执行。如果你想编写一个外部做某事的脚本,你可能想要挂钩XML-RPC API