I need to keep a copy of WordPress in my project's Git repository.
I want to use Git to pull down WordPress updates from GitHub, and then push out those updates via git push and/or git svn dcommit.
I currently have a solution in place using Git submodules, and it works; but now I need to deploy my newest project to a server that only supports SVN, and to which I have no direct access whatsoever. Therefore, submodules are out.
I've done a ton of reading on Git's subtree merging strategy, and I think it's the right solution; but everything I've read expects that I'd want to follow a remote branch, and always pull down its most recent code.
On the contrary, WordPress on GitHub uses its master branch – in fact, all of its branches – for development; releases are tagged, but that's it. Officially speaking, all branches are in a perpetual alpha state.
I think what I need to figure out is how to subtree merge a tag.
Right now, I'm doing this to read WordPress 3.5 into webroot/wordpress (and to namespace WordPress tags), and it works:
$ git remote add -t master --no-tags wordpress git://github.com/WordPress/WordPress.git $ git config --add remote.wordpress.fetch +refs/tags/*:refs/tags/wordpress/* $ git fetch wordpress warning: no common commits remote: Counting objects: 138547, done. remote: Compressing objects: 100% (28297/28297), done. remote: Total 138547 (delta 110613), reused 137367 (delta 109624) Receiving objects: 100% (138547/138547), 46.05 MiB | 2.26 MiB/s, done. Resolving deltas: 100% (110613/110613), done. From git://github.com/WordPress/WordPress * [new branch] master -> wordpress/master * [new tag] 1.5 -> wordpress/1.5 ... * [new tag] 3.5 -> wordpress/3.5 * [new tag] 3.5.1 -> wordpress/3.5.1 $ git read-tree --prefix=webroot/wordpress/ -u wordpress/3.5 $ git commit -m "Added WordPress 3.5 at webroot/wordpress" [master c483104] Added WordPress 3.5 at webroot/wordpress 1061 files changed, 269102 insertions(+) create mode 100644 webroot/wordpress/index.php create mode 100644 webroot/wordpress/license.txt create mode 100644 webroot/wordpress/readme.html ... No matter what I try, though, I can't figure out how to use subtree merging to update this with WordPress 3.5.1.
Trying merge and read-tree, as per this, doesn't work:
$ git merge -s ours --squash --no-commit wordpress/3.5.1 Squash commit -- not updating HEAD Automatic merge went well; stopped before committing as requested $ git read-tree --prefix=webroot/wordpress/ -u wordpress/3.5.1 error: Entry 'webroot/wordpress/index.php' overlaps with 'webroot/wordpress/index.php'. Cannot bind. Trying a subtree merge fails:
$ git merge -s subtree --squash --no-commit wordpress/3.5.1 warning: Cannot merge binary files: webroot/wordpress/wp-includes/js/tinymce/wp-tinymce.js.gz (HEAD vs. wordpress/3.5.1) ... Squash commit -- not updating HEAD Automatic merge failed; fix conflicts and then commit the result. (git pull -s subtree --squash --no-commit wordpress 3.5.1 fails the same way.)
I've tried adding -Xtheirs to git merge, I've tried a recursive merge with -Xsubtree, I've tried every combination of temporary branches and subtree merging that I can figure out – but I can't seem to crack this.
Any ideas? Or should I just give up and download (and re-download, and re-download) WordPress the old-fashioned way?