如何添加/升级​​/降级在我的仓库远程Git项目,而无需使用子模块?(How do I add/up

2019-07-19 04:01发布

我需要保持的WordPress的副本,我的项目的Git仓库。

我想用Git用从GitHub拉下WordPress的更新,然后通过推出这些更新git push和/或git svn dcommit

我目前在使用Git子模块到位的解决方案,它的工作原理; 但现在我需要我的最新项目部署到只支持SVN服务器,而我没有直接接入任何责任。 因此,子模块都出来了。

我已经做了一吨的阅读Git的子树合并策略 ,我认为这是正确的解决方案; 但一切我读过预计,我愿意跟随远程分支,始终拉下最近的代码。

相反, WordPress的GitHub上使用它的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更新此。

试图mergeread-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老式的方法?

Answer 1:

如果你想要做的就是经常拉一个远程的文件到您的项目,你不关心它的历史连接到你的,那么没有合并的任何需要。

最后,解决方案是死的简单:

  • 拆下的Git索引旧版本的WordPress的;
  • 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%)
...


文章来源: How do I add/upgrade/downgrade a remote Git project in my repository without using submodules?