Совмещаем gh-pages с git-worktree
GitHub pages — отличный способ публикации сайтов о ваших проектах на GitHub. Для этого нужно создать ветку в репозитории с названием gh-pages, где нужно разместить нужные HTML файлы. Однако это означает, что придется постоянно переключатся между двумя ветками, чтобы вносить изменения в репозиторий и на сайт о данном репозитории. Но на помощь приходит сравнительно новая команда worktree.
📖 Содержание ⬇️
Содержание
Создание новой ветки
Покажу на примере одного из своего репозитории https://github.com/Harrix/Standard-Genetic-Algorithm.
На самом деле, не очень люблю консоль и предпочитаю GUI клиенты. Однако с командой worktree программа GitHub Desktop нормально работать не умеет, поэтому будем работать в консоли Git Shell:

Рисунок 1 — Консоль Git Shell
Переходим в папку нашего проекта:
cd RepositoryName
У меня это будет:
cd Standard-Genetic-Algorithm

Рисунок 2 — Переход в папку репозитория
Создаем новую ветку с именем gh-pages (именно с таким именем, если хотим её публиковать на GitHub Pages):
git checkout -b gh-pages

Рисунок 3 — Создание новой ветки
Отправляем ветку на сервер:
git push -u origin gh-pages

Рисунок 4 — Публикация ветки на сервере
Теперь в репозитории две ветки:

Рисунок 5 — Две ветки на сервере
Наполнение сайта
Удаляем всё из рабочей папки:

Рисунок 6 — Содержимое папки репозитория
Вставляем HTML страницу с каким-нибудь наполнением:

Рисунок 7 — HTML файл с CSS стилями
Теперь командами делаем коммит и отправляем его на сервер:
git add .
git commit -m "HTML Template"
git push

Рисунок 8 — Создание нового коммита
Теперь по адресу https://harrix.github.io/Standard-Genetic-Algorithm/ (harrix — мой логин на GitHub, а Standard-Genetic-Algorithm — название репозитория) появится сайт репозитория:

Рисунок 9 — Созданный сайт
Да, сейчас данный «сайт» не будет работать, так как он создавался только для написания статьи.
Создание worktree
Всё хорошо, однако придется постоянно переключатся между ветками, чтобы работать то с сайтом, то с самим проектом. Было бы здорово, если бы на компе было сразу две папки с содержимым сайта и самим проектом. Что и сделаем.
В основной папке репозитория (у меня это C:\Dropbox\GitHub\Standard-Genetic-Algorithm) будем хранить ветку master. А в другой папке будем хранить ветку gh-pages.
Создадим эту новую папку уровнем выше. Предлагаю её называть так: [Имя репозитория]_[Имя ветки].
Разумеется, что папку можно создать и обычным способом в Проводнике. Но раз мы в консоли, то там и сделаем, и вернемся обратно в нашу старую папку:
cd ..
mkdir Standard-Genetic-Algorithm_gh-pages
cd Standard-Genetic-Algorithm

Рисунок 10 — Создание новой папки
Переключимся на ветку master:
git checkout master

Рисунок 11 — Переключение на другую ветку
Теперь в новую папку отправим ветку gh-pages:
git worktree add ../Standard-Genetic-Algorithm_gh-pages gh-pages

Рисунок 12 — Выполнение команды worktree
Теперь в папке Standard-Genetic-Algorithm_gh-pages у нас находится содержимое ветки gh-pages:

Рисунок 13 — Содержимое папки Standard-Genetic-Algorithm_gh-pages
А в папке Standard-Genetic-Algorithm находится основная ветка master:

Рисунок 14 — Содержимое папки Standard-Genetic-Algorithm
Как делать коммиты
Теперь мы можем одновременно работать с двумя папками, и не нужно будет переключаться постоянно между ветками. Однако вначале я помучился с понимаем того, а как делать коммиты в этих двух ветках.
В основной ветке всё просто:
git add .
git commit -m "BlaBla"
git push
А вот изменения в ветке gh-pages не видятся, и переключение командой git checkout gh-pages не работает.
Всё просто. Нужно просто перейти в папку, где у нас находится эта ветка и там обычным способом создавать коммит:
cd ../Standard-Genetic-Algorithm_gh-pages
git add .
git commit -m "BlaBlaBla"
git push

Рисунок 15 — Создание коммитов в соседней ветке
А потом, если нужно, опять переходим в папку основной ветки:
cd ../Standard-Genetic-Algorithm
Дополнительно
Командой git worktree list можно узнать список веток, выделенных под разные папки:

Рисунок 16 — Список веток в worktree
В GitHub Desktop в GUI режиме можно будет коммиты делать только для основной ветки. Коммиты для веток, вынесенных командой worktree придется делать в консоли.