Git: обновить корневой каталог ветки из подкаталога другого

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

Если у меня еще нет настройки ветвления gh-страниц, я могу разветкить, очистить ветку и скопировать содержимое каталога 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

Чтобы запустить ветвь gh-pages:

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

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