2014-09-30 5 views
4

У меня вопросКак правильно совершить в хранилище с Github страницы филиала

Ситуация, основанный на gh-pages

Мой проект использует препроцессор и другой сложный персонал, поэтому мой проект stucture выглядит следующим образом:

мастер филиал

./-| 
    /src 
    /node_modules 
    /public-| 
     /js 
     /css 
     /etc 
     index.html   
    /etc 
    package.json 
    etc 

все источники кода в src папка, скомпилированная - в общественная папка.
общественный папка также в .gitignore
Я хотел бы зафиксировать все файлы в своей общей папке в ветке gh-pages. Является ли это возможным? Если да, как это сделать? Это структура моего Gh-страниц филиала

GH-страница филиал

./-| 
    /js 
    /css 
    /assets 
    index.html  

Я думаю, что это будет здорово запустить рубака/задачу глотка и фиксацию результата в другую отрасль.

+0

Связанный: http://stackoverflow.com/q/7212290/946850 – krlmlr

+0

Эй, @Martijn Pieters, этот вопрос не является дубликатом другого, и мой ответ так же скроен, как и он. Пожалуйста, подумайте об этом. –

ответ

4

У меня есть пара скриптов, которые делают именно это. В моей ситуации, источники Дока в . (относительно того, где скрипты запускаются, конечно), генерируется документация в _build/html, и я выдавать команды

touch _build/html/.nojekyll # disable GitHub's Jekyll page generator 
./commit-to-gh-pages.sh _build/html 

где commit-to-gh-pages.sh является

#! /bin/sh 

# Commit the generated HTML pages to the branch gh-pages. 
# Will not push them to GitHub. 

set -e -v 

treehash=$(./hash-tree.py "${1:-_build/html}") 
parent=$(git rev-parse gh-pages) 

msg="Regenerated docs for $(git rev-parse HEAD)" 
commithash=$(echo "$msg" | git commit-tree $treehash -p $parent) 
echo "Updating gh-pages to $commithash" 
git update-ref refs/heads/gh-pages "$commithash" 

Это записывает каталог _build/html в индекс Git, делает объект фиксации, который имеет именно это дерево каталогов в качестве его содержимого, и записывает объект фиксации в ветвь gh-pages с предыдущим состоянием этой ветви в качестве родителя.

Сложная часть - это сценарий hash-tree.py, который расширяет команду git hash-object для деревьев каталогов. Я не буду копировать его, но вы можете получить его here. (Если кто-нибудь знает более элегантный способ сделать это, скажите, пожалуйста.)

+0

Мне нужно время, чтобы понять этот скрипт, некоторые из git-команд, которые я вижу вначале – Ifozest

+0

@Viachaslau. Я тоже не знал их до того, как начал писать это :) Эти команды являются частью «сантехники», http: // git-scm .com/book/ru/Git-Internals-Plumbing-and-Porcelain –

+0

Это увлекательно! Не так много для использования человеком, но, вероятно, идеально подходит для сценариев. – krlmlr

1

Вы можете попробовать использовать git subtree, если у вас есть версия git> 1.7.11. Мне пока не удается понять детали, поэтому я не буду пытаться это объяснить, но есть учебник по адресу Hugo website builder. Соответствующая часть начинается с заголовка configure git workflow.

2

Я имел отличный опыт с клонированием репо в подкаталоге себя и проверить другую ветвь: Для вашего дела что-то вроде

# add public to .gitignore 
git clone . public 
cd public 
git checkout --orphan gh-pages 
git reset --hard 
git commit --allow-empty "initial" 

поможет вам начать работу. См. http://krlmlr.github.io/git-subbranch для записи.