Если у вас нет ветки с именем gh-pages
в локальных или удаленных репозиториях, то создайте ветку, используя флаг --orphan
, чтобы она была пустой. Github содержит инструкции по созданию страниц Github вручную. . Если вы использовали Automatic Page Generation , то вы можете пропустить этот шаг, но заменить локальную ветку gh-pages
на удаленную ветку origin/gh-pages
везде в этом посте, в противном случае получить удаленную ветку локально . ПРИМЕЧАНИЕ. Вы можете пропустить создание файла .nojekyll
, но вы должны удалить все файлы из сиротской ветви и зафиксировать его, иначе он не будет создан.
. $ (master) git checkout --orphan gh-pages
. $ (gh-pages) git rm -rf.
. $ (gh-pages) echo >> .nojekyll
. $ (gh-pages) git add .nojekyll
. $ (gh-pages) git commit -m "create github pages, ignore jekyll"
Если у вас уже есть документация в поддереве в вашей основной ветке, вы могли бы извлечь ее и зафиксировать, используя git-read-tree прямо сейчас, но вы должны знать древовидную структуру. Предположительно, вы могли бы сначала использовать git-write-tree , который выведет SHA-1 дерева, названного флагом --prefix
в текущем индексе. Затем используйте флаг -u
, чтобы обновить ветку gh-pages
с изменениями из основной ветви и зафиксировать изменения.
. $ (master) git write-tree --prefix=docs/_build/html master
abcdefghijklmnopqrstuvwxyz1234567890abcd
. $ (master) git checkout gh-pages
. $ (gh-pages) git read-tree abcdefghijklmnopqrstuvwxyz1234567890abcd
. $ (gh-pages) git commit -m "update gh-pages html from master docs"
Оформить заказ master
и использовать git-read-tree
, чтобы скопировать рабочую копию ветви gh-pages
по какому-либо пути в master
, например: ./docs/_build/html
. Флаг -u
обновляет файлы в рабочей копии, если слияние прошло успешно. Этот шаг может быть ненужным, если в ветви gh-pages
нет файлов, которые вы хотите объединить с master, но если они есть, это может помочь стратегии объединения поддеревьев выяснить, в каком дереве находятся ваши файлы. Как обычно, Git не позволит вам объединять файлы, которые уже существуют, или если в вашем репо есть незафиксированные изменения. Используйте этот шаг, если вы хотите объединить страницы, созданные с помощью автоматического создания страниц, в другое дерево, например: docs
в вашей ветви master
. Не забудьте отправить новые файлы в ветку master
.
. $ (gh-pages) git checkout master
. $ (master) git read-tree --prefix=docs/_build/html -u gh-pages
. $ (master) git commit -m "read gh-pages tree into master at ./docs/_build/html"
Внесите изменения в свою документацию и сгенерируйте html любым удобным для вас способом. Например: Джекилл , Пеликан или Сфинкс . ПРИМЕЧАНИЕ. Если вы не используете Jekyll и нуждаетесь в подчеркивании папок / файлов, например, для *.css
или *.js
файлов, то обязательно добавьте файл с именем .nojekyll
в каталог html.
./docs $ (master) sphinx-quickstart
...
./docs $ (master) make html
./docs/_build/html $ (master) echo >> .nojekyll
Обновите ветку gh-pages
, используя стратегию слияния поддеревьев (-s subtree
), раздавите все коммиты, чтобы история страниц Github не была загрязнена (--squash
), и дождитесь завершения слияния, чтобы зафиксировать так что вы можете просмотреть (--no-commit
). ПРИМЕЧАНИЕ. Когда вы извлекаете ветку gh-pages
, файлы и папки от мастера, вероятно, останутся как Без отслеживания , просто проигнорируйте их и сконцентрируйтесь на том, что на самом деле находится в индексе. ПРИМЕЧАНИЕ: Git будет не извлекать gh-pages
, если в master
.
есть какие-либо неснятые или несвязанные изменения.
. $ (master) git checkout origin/gh-pages
. $ (gh-pages) git merge --no-commit --squash -s subtree master
Git делает лучшее предположение о том, какие деревья вы хотите объединить, используя стратегию слияния поддеревьев, однако, если не так уж и много, вам лучше явно указать Git, какое дерево объединить .
. $ (gh-pages) git merge --no-commit --squash -s recursive -Xsubtree=docs/_build/html/ master
Просмотрите ваши изменения и зафиксируйте. Merge генерирует для вас сообщение, содержащее краткий журнал всех коммитов слияния.
. $ (gh-pages) git commit
При нажатии на ветку gh-pages
развертывается веб-сайт GitHub Pages.
. $ (gh-pages) git push origin gh-pages
Возврат к master
.
. $ (gh-pages) git checkout master
Если по какой-либо причине вам необходимо получить изменения из вашего gh-pages
, используйте стратегию слияния поддерева в противоположном направлении. EG git merge --squash --no-commit -s subtree gh-pages
Чтобы сделать diff из двух ветвей, соответствующих деревьям, используйте diff-tree
. $ git diff-tree master gh-pages
Поместите это в скрипт или ловушку после фиксации, которая запускается всякий раз, когда вы редактируете свои документы или добавляете его в Makefile
, который вы используете для генерации html и вуаля! программно сгенерированных страниц GitHub .