如何升级和部署WordPress作为Git子模块安装?

时间:2013-01-25 18:13:41

标签: wordpress git deployment

我正在使用类似于Mark Jaquith的WordPress Skeleton的WordPress目录结构,它将WordPress作为子模块放在与内容不同的目录中:

/content
/wp
/local-config.php
/wp-config.php
/index.php

我还使用git和post-receive钩子将我的代码更改推送到我的实时服务器。这一切都很有效,除了当我尝试升级WordPress并将其推送到实时服务器时。

这是我在本地计算机和远程服务器上设置repo的方法:

本地机器

cd /www
git init .
git submodule add git://github.com/WordPress/WordPress.git wp
git commit -m "Add Wordpress submodule."
cd wp
git checkout 3.5

签出标签后,我从git收到关于处于'分离的HEAD'状态的警告。由于我不打算对WordPress做任何提交,我认为这不应该是一个问题。

cd ..
git commit -am "Checkout Wordpress 3.5"

远程服务器

git init --bare
cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/home/public git checkout -f

chmod +x hooks/post-receive

git remote add web ssh://user@server/home/private/code/wordpress.git

git push web +master:refs/heads/master

我收到此错误:

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'ssh://userserver/home/private/code/wordpress.git'

经过一些谷歌搜索,看起来我可以使用此命令将主分支同步到服务器(我不知道这是如何工作的)

git push web +master:refs/heads/master

这对我没有帮助,因为我不想跟踪主人,我想跟踪发布标签,3.5。更多的谷歌搜索让我接受了这个命令:

git push web +3.5~0:refs/heads/master

要升级子模块,我这样做:

cd wp
git fetch && git fetch --tags
git checkout 3.5.1
git push web +3.5.1~0:refs/heads/master

我这样做是否正确?我看到的所有教程都只有git push web而且已经完成了。大多数甚至不包括升级子模块。这样做工作但如果我不需要,我会觉得使用这种奇怪的推送语法感觉不舒服。

如何正确地将此分离的HEAD状态推送到服务器?

我也尝试使用git checkout -b mywp 3.5分支,但是到了升级的时候,我不知道如何将新的3.5.1标记引入我的mywp分支。

WP Answers上提问,但这里可能更合适。

1 个答案:

答案 0 :(得分:3)

在远程服务器上尝试:

git submodule update --init --recursive

这将以递归方式更新所有子模块

您也可以发出:

git fetch --tags

这将更新本地标签,从中央远程仓库获取更新列表。