Aar*_*ams 7 git github git-svn git-pull git-merge
我需要在我的项目的Git存储库中保留一份WordPress.
我想使用Git从GitHub下载WordPress更新,然后通过git push和/或推出这些更新git svn dcommit.
我目前有一个使用Git子模块的解决方案,它的工作原理; 但现在我需要将我的最新项目部署到仅支持SVN的服务器,而且我无法直接访问该服务器.因此,子模块已经出局.
我已经对Git的子树合并策略进行了大量阅读,我认为这是正确的解决方案; 但我读过的所有内容都希望我能够关注一个远程分支,并始终下载最新的代码.
相反,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
...
Run Code Online (Sandbox Code Playgroud)
不管我尝试什么,我都无法弄清楚如何使用子树合并来使用WordPress 3.5.1更新它.
尝试merge并且read-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.
Run Code Online (Sandbox Code Playgroud)
尝试子树合并失败:
$ 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.
Run Code Online (Sandbox Code Playgroud)
(git pull -s subtree --squash --no-commit wordpress 3.5.1以同样的方式失败.)
我尝试添加-Xtheirs到git merge,我已经尝试了递归merge用-Xsubtree,我已经试过临时树枝和树的合并,我可以计算出的每个组合-但我似乎无法破解这个.
有任何想法吗?或者我应该放弃并以旧式方式下载(并重新下载和重新下载)WordPress?
Aar*_*ams 10
如果您只想将远程文件拉入项目中,并且不关心将其历史记录连接到您的项目,则无需任何合并.
最终,解决方案很简单:
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%)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |