Как добавить / обновить / понизить удаленный проект Git в моем хранилище без использования подмодулей?
Мне нужно сохранить копию WordPress в Git-репозитории моего проекта.
Я хочу использовать Git для загрузки обновлений WordPress из GitHub, а затем выгружать эти обновления через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.
Попытка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.
Попытка слияния поддерева не удалась:
$ 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
терпит неудачу так же.)
Я пытался добавить-Xtheirs
вgit merge
Я попробовал рекурсивныйmerge
с участием-Xsubtree
Я пробовал каждую комбинацию временных веток и слияний поддеревьев, которую я могу выяснить - но я не могу это взломать.
Есть идеи? Или я должен просто сдаться и загрузить (и повторно загрузить, и повторно загрузить) WordPress старомодным способом?