我正在使用类似于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上提问,但这里可能更合适。
答案 0 :(得分:3)
在远程服务器上尝试:
git submodule update --init --recursive
这将以递归方式更新所有子模块
您也可以发出:
git fetch --tags
这将更新本地标签,从中央远程仓库获取更新列表。