Вопрос по git, github – Обновите корневой каталог ветки из подкаталога другого

16

Разрабатывая на github, я часто поддерживаюhtml/ или же_site/ подкаталог в моей основной ветке, где я генерирую сетевую документацию для проекта. Я бы хотел переключиться на мою ветку gh-pages иpull только содержание этогоhtml каталог в корень ветви gh-pages, поэтому он будет отображаться как хороший сайт через github (который автоматически отображает html вgh-pages вusername.github.com/repositoryname). Каков наилучший рабочий процесс для этого?

Если у меня еще нет настроенной ветви gh-pages, я могу выполнить ветвь, очистить ветку и скопировать содержимоеhtml Каталог и Presto, у меня есть сайт готов к работе. Но я не уверен, как лучше позже обновить ветку gh-pages.

git branch gh-pages
git checkout gh-pages
# Remove files I don't need from the gh-pages branch
rm -rf data/ man/ R/ README.md NEWS NAMESPACE DESCRIPTION demo/
# move documentation to the root
mv inst/doc/html/* .
# remove the rest
rm -rf inst/
git add *
git commit -a -m "gh-pages documentation"
git push origin gh-pages
git checkout master

Теперь, что я должен сделать, чтобы позже обновить ветку gh-pages? Похоже, это может включатьобъединение поддеревьев но я не совсем уверен.

Ваш Ответ

1   ответ
13

true | git mktree | xargs git commit-tree | xargs git branch gh-pages

Чтобы извлечь из него все, что вы хотите, скажем, каталог html из главной ветки, read-tree и commit:

git checkout gh-pages
git read-tree master:html
git commit -m'gh-pages documentation'
git push origin gh-pages
git checkout master

и вы сделали.

Позднее добавление: есть более короткая последовательность для добавления в ветку gh-pages:

git commit-tree -p gh-pages -m "" master:html \
| xargs git update-ref refs/heads/gh-pages

который не требует очистки текущего рабочего дерева

Понял. Довольно интересное использованиеgit commit-tree, тем не мение. Я не одобряю ваш ответ, хотя: я уже сделал.
@VonC Зависит от того, что вы хотите. Таким образом, ваша ветвь gh-pages сохраняет историю, если вы осиротели, а истории нет. Простой способ сделать сироту здесь будетgit commit-tree v1.6:html -mreset | xargs git branch -f gh-pages
Будет ли сиротская ветвь здесь одинаково уместной? (stackoverflow.com/questions/7646487/…)
Спасибо,read-tree делает для очень хорошего решения! Определенно предпочтительнееgit checkout master inst/doc/html отgh-pages ветка а потом все перезаписать. cboettig
Ваша первая команда работает хорошо, но немного загадочно. Можете ли вы описать, что она делает и почему вам нужно использовать каналы? cboettig

Похожие вопросы