GitHub pages — отличный способ публикации сайтов о ваших проектах на GitHub. Для этого нужно создать ветку в репозитории с названием gh-pages, где нужно разместить нужные HTML файлы. Однако это означает, что придется постоянно переключатся между двумя ветками, чтобы вносить изменения в репозиторий и на сайт о данном репозитории. Но на помощь приходит сравнительно новая команда worktree.

Создание новой ветки

Покажу на примере одного из своего репозитории https://github.com/Harrix/Standard-Genetic-Algorithm.

На самом деле, не очень люблю консоль и предпочитаю GUI клиенты. Однако с командой worktree программа GitHub Desktop нормально работать не умеет, поэтому будем работать в консоли Git Shell:

Консоль Git Shell

Переходим в папку нашего проекта:

cd RepositoryName

У меня это будет:

cd Standard-Genetic-Algorithm

Переход в папку репозитория

Создаем новую ветку с именем gh-pages (именно с таким именем, если хотим её публиковать на GitHub Pages):

git checkout -b gh-pages

Создание новой ветки

Отправляем ветку на сервер:

git push -u origin gh-pages

Публикация ветки на сервере

Теперь в репозитории две ветки:

Две ветки на сервере

Наполнение сайта

Удаляем всё из рабочей папки:

Содержимое папки репозитория

Вставляем HTML страницу с каким-нибудь наполнением:

HTML файл с CSS стилями

Теперь командами делаем коммит и отправляем его на сервер:

git add .
git commit -m "HTML Template"
git push

Создание нового коммита

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

Созданный сайт

Да, сейчас данный «сайт» не будет работать, так как он создавался только для написания статьи.

Создание worktree

Всё хорошо, однако придется постоянно переключатся между ветками, чтобы работать то с сайтом, то с самим проектом. Было бы здорово, если бы на компе было сразу две папки с содержимым сайта и самим проектом. Что и сделаем.

В основной папке репозитория (у меня это C:\Dropbox\GitHub\Standard-Genetic-Algorithm) будем хранить ветку master. А в другой папке будем хранить ветку gh-pages.

Создадим эту новую папку уровнем выше. Предлагаю её называть так: [Имя репозитория]_[Имя ветки].

Разумеется, что папку можно создать и обычным способом в Проводнике. Но раз мы в консоли, то там и сделаем, и вернемся обратно в нашу старую папку:

cd ..
mkdir Standard-Genetic-Algorithm_gh-pages
cd Standard-Genetic-Algorithm

Создание новой папки

Переключимся на ветку master:

git checkout master

Переключение на другую ветку

Теперь в новую папку отправим ветку gh-pages:

git worktree add ../Standard-Genetic-Algorithm_gh-pages gh-pages

Выполнение команды worktree

Теперь в папке Standard-Genetic-Algorithm_gh-pages у нас находится содержимое ветки gh-pages:

Содержимое папки Standard-Genetic-Algorithm_gh-pages

А в папке Standard-Genetic-Algorithm находится основная ветка master:

Содержимое папки 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

Создание коммитов в соседней ветке

А потом, если нужно, опять переходим в папку основной ветки:

cd ../Standard-Genetic-Algorithm

Дополнительно

Командой git worktree list можно узнать список веток, выделенных под разные папки:

Список веток в worktree

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