2

I am using a WordPress directory struture similar to Mark Jaquith's WordPress Skeleton, which has WordPress in a separate directory from the content as a submodule:

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

I also use git and post-receive hooks to push my code changes up to my live server. It all works great except for when I try to upgrade WordPress and push that up to the live server.

This is how I setup the repo on my local machine and the remote server:

Local Machine

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

After checking out the tag, I get a warning from git about being in a 'detached HEAD' state. Since I don't plan on making any commits to WordPress, I don't think that should be an issue.

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

Remote Server

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

I get this error:

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'

After some googling, it looks like I can use this command to sync up the master branch up to the server (I have no idea how this works)

git push web +master:refs/heads/master

This doesn't help me though because I don't want to track master, I want to track a release tag, 3.5. Some more googling got me to this command:

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

To upgrade the submodule, I do this:

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

Am I doing this correctly? All the tutorials I see for this just have git push web and they're done. Most don't even cover upgrading the submodule. This does work but I don't feel comfortable using this weird push syntax if I don't have to.

How do I push this detached HEAD state up to the server correctly?

I've also tried this using a branch with git checkout -b mywp 3.5 but when it comes time to upgrade, I don't know how to bring in the new 3.5.1 tag into my mywp branch.

Asked this on WP Answers, but it might be more appropriate here.

4

1 に答える 1

3

リモートサーバーで次を試してください:

git submodule update --init --recursive

これにより、すべてのサブモジュールが再帰的に更新されます

以下を発行することもできます。

git fetch --tags

これにより、中央のリモート リポジトリから更新されたリストをフェッチするローカル タグが更新されます。

于 2013-01-30T20:16:54.053 に答える