使用子模块进行git部署

时间:2012-05-11 16:52:39

标签: git git-submodules

我一直在研究使用git部署网站的不同方法,并找到了以下教程:

http://42pixels.com/blog/quick-and-dirty-git-deployment

我喜欢本教程中提出的想法,并且热衷于将它用于我的网站,只是它似乎不支持子模块。

是否可以更改此项以便根据需要提取和更新子模块?

谢谢。

更新

过去几个小时我一直在研究这个问题,而且我似乎在取得进展,但我仍然无法让它发挥作用。

我已经切换到这个教程:http://toroid.org/ams/git-website-howto(大致相同,只是一些细微的变化),并在遵循以下建议后发现:https://stackoverflow.com/a/6636509/1049688我最终得到了一个收件人文件如下所示:

#!/bin/sh

export GIT_WORK_TREE=/srv/www/limeblast.co.uk/htdocs_test
export GIT_DIR=/srv/www/limeblast.co.uk/.git
cd $GIT_WORK_TREE

git checkout -f master
git submodule init
git submodule update

这在理论上似乎很好,并且看起来子模块命令正在运行,但我收到以下错误消息:

remote:子模块'wordpress'(git://github.com/WordPress/WordPress.git)已注册路径'wordpress' remote:子模块'wp-content / themes / limeblastevolution / inc / cssCrush'(git://github.com/peteboere/css-crush.git)已注册路径'wp-content / themes / limeblastevolution / inc / cssCrush' remote:致命:工作树'/srv/www/limeblast.co.uk/htdocs_test'已经存在。 remote:将'git://github.com/WordPress/WordPress.git'克隆到子模块路径'wordpress'失败

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:6)

git-deploy可能会取得成功。

但是,如果这太过于关注Rails,或者由于其他原因你不能或不会使用它,这里是如何在post-commit钩子中强制子模块更新:

git submodule init && git submodule sync && git submodule update

您必须在服务器上运行它;所以最好将它添加到hooks/post-receive脚本中。这是简单的BASH或SH,bytheway。