7

プロジェクトの Git リポジトリに WordPress のコピーを保持する必要があります。

git pushGit を使用して GitHub から WordPress の更新を取得し、それらの更新をand/or経由でプッシュしたいと考えていますgit svn dcommit

私は現在、Git サブモジュールを使用したソリューションを用意しており、それは機能します。しかし今、最新のプロジェクトを、SVN のみをサポートし、直接アクセスできないサーバーにデプロイする必要があります。したがって、サブモジュールはアウトです。

私はGit の subtree merging strategyについて多くのことを読みましたが、それが正しい解決策だと思います。しかし、私が読んだものはすべて、リモートブランチをたどり、常に最新のコードをプルダウンしたいと思っていることを期待しています.

それどころか、GitHub 上の WordPressはそのmasterブランチ (実際にはすべてのブランチ) を開発に使用します。リリースはタグ付けされていますが、それだけです。公式に言えば、すべてのブランチは永続的なアルファ状態にあります。

私が理解する必要があるのは、タグをサブツリーでマージする方法だと思います。

現在、WordPress 3.5 をwebroot/wordpress(および名前空間の WordPress タグに) 読み込むためにこれを行っており、動作します。

$ 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
...

しかし、何を試しても、サブツリーのマージを使用してこれを WordPress 3.5.1 で更新する方法がわかりません。

試しmergeてみて、 thisread-treeに従って、機能しません:

$ 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.

サブツリーのマージを試みると失敗します:

$ 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同じように失敗します。)

に追加-Xtheirsgit mergeてみました。 で再帰mergeを試しました-Xsubtree。一時的なブランチとサブツリーのマージのあらゆる組み合わせを試しましたが、これをクラックすることはできません。

何か案は?それとも、WordPress を昔ながらの方法でダウンロード (および再ダウンロード、再ダウンロード) する必要がありますか?

4

1 に答える 1

10

リモートのファイルを自分のプロジェクトに頻繁に取り込むだけで、その履歴を自分の履歴に接続することを気にしない場合は、マージはまったく必要ありません。

最終的に、解決策は非常に単純です。

  • 古いバージョンの WordPress を Git インデックスから削除します。
  • ;を使用して、WordPress の新しいバージョンを Git インデックスにプルしread-treeます。
  • 専念。

read-treeここで必要なツールは だけです。また、read-treeファイルの上書きを (賢く) 拒否するため、インデックスから古いツリーを削除してから、新しいツリーをその場所に読み込む必要があります。

$ git rm -r webroot/wordpress
rm 'webroot/wordpress/index.php'
rm 'webroot/wordpress/license.txt'
rm 'webroot/wordpress/readme.html'
...
$ git read-tree --prefix=webroot/wordpress/ -u wordpress/3.5.1
$ git commit -m "Updated to WordPress 3.5.1"
[master 9665ad7] Updated to WordPress 3.5.1
 44 files changed, 406 insertions(+), 176 deletions(-)
 rewrite webroot/wordpress/wp-admin/js/post.min.js (81%)
 rewrite webroot/wordpress/wp-includes/js/media-editor.min.js (99%)
 rewrite webroot/wordpress/wp-includes/js/media-views.min.js (89%)
...
于 2013-02-05T22:19:00.133 に答える