HTML экспорт другой отрасли - PullRequest
7 голосов
/ 01 апреля 2012

У меня есть файлы org в репозитории github и я использую страницы проекта будущее. Экспорт файлов org в HTML для использования в gh-pages, как это;

  • редактирование файлов org в ветке master и фиксация
  • экспорт html во временный каталог
  • изменение ветви на gh-pages
  • копирование файлов из временного каталога и фиксация

есть ли способ экспортировать напрямую в gh-pages ветку без этот export/change branch/copy цикл?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Я исправил проблему с использованием подмодулей git. Теперь я могу экспортировать мои файлы org в папку в репозитории master. Эта папка на самом деле является подмодулем ветвей репозиториев gh-pages. Вы можете просмотреть мои org-publish-project-alist в хранилище и страницу . Теперь мой цикл разработки;

  • Редактировать в master, затем экспортировать html
  • Добавить, вставить в gh-pages каталог
  • Добавить, вставить master корневой каталог

Сначала я добавил ветку gh-pages, как сказано в github , затем добавил ветку gh-pages в виде подмодуля:

[slmn@uriel org-test](gh-pages)$ git checkout master
[slmn@uriel org-test](master)$ git submodule add -b gh-pages git@github.com:selman/org-test.git gh-pages
[slmn@uriel org-test](master)$ git commit -m "branch added as submodule"

Экспортируется index.org в виде html в каталог gh-pages:

[slmn@uriel org-test](master)$ cd gh-pages/
[slmn@uriel gh-pages](gh-pages)$ git add .
[slmn@uriel gh-pages](gh-pages)$ git commit -m "pages updated"
[slmn@uriel gh-pages](gh-pages)$ git push

Измененный подмодуль добавлен в master:

[slmn@uriel gh-pages](gh-pages)$ cd ..
[slmn@uriel org-test](master)$ git add .
[slmn@uriel org-test](master)$ git commit -m "pages updated"
[slmn@uriel org-test](master)$ git push
2 голосов
/ 01 апреля 2012

Вместо экспорта во временный каталог вы можете экспортировать во второй клон хранилища (с отмеченной веткой gh-pages).

Если вы хотите более автоматизированное, но сложное решение, вы можетезапустите следующий скрипт после экспорта ваших файлов:

#!/bin/sh

usage() {
    cat <<EOF
Usage: $0 [options] [--] <path_to_exported_html_files>

Arguments:

  -h, --help
    Display this usage message and exit.

  -b <branch>, --branch=<branch>, --branch <branch>
    Commit the files to the given branch.  If the branch doesn't
    exist, a new root (parentless) commit is created.
    Defaults to: ${DEFAULT_BRANCH}

  --
    Treat the remaining arguments as path names.  Useful if the path
    name might begin with '-'.

  <path_to_exported_html_files>
    Directory containing the html files exported by org-mode.  If the
    path begins with '-', it will be treated as an option unless it
    comes after the '--' option.
EOF
}

DEFAULT_BRANCH=gh-pages

# handy logging and error handling functions
log() { printf '%s\n' "$*"; }
warn() { log "WARNING: $*" >&2; }
error() { log "ERROR: $*" >&2; }
fatal() { error "$*"; exit 1; }
try() { "$@" || fatal "'$@' failed"; }
usage_fatal() { error "$*"; usage >&2; exit 1; }

# parse options
BRANCH=${DEFAULT_BRANCH}
while [ "$#" -gt 0 ]; do
    arg=$1
    # the quotes around the equals signs in the case patterns below
    # are to work around a bug in emacs' syntax parsing
    case $1 in
        -h|--help) usage; exit 0;;
        -b|--branch) shift; BRANCH=$1;;
        --branch'='*) BRANCH=${1#--branch=};;
        --) shift; break;;
        -*) usage_fatal "unknown option: '$1'";;
        *) break;; # reached the path
    esac
    shift || usage_fatal "option '${arg}' requires a value"
done
[ "$#" -gt 0 ] || usage_fatal "must specify a directory"
dir=$1; shift
dir=$(cd "${dir}" && pwd -P) \
    || fatal "unable to convert ${dir} to an absolute path"
[ "$#" -eq 0 ] || usage_fatal "unknown option: $1"
[ -d "${dir}" ] || usage_fatal "${dir} is not a directory"

# sanity check:  make sure ${BRANCH} isn't currently checked out
# (otherwise 'git status' will show modified files when this script is
# done)
CURRENT_BRANCH=$(try git symbolic-ref HEAD) || exit 1
case ${CURRENT_BRANCH} in
    refs/heads/"${BRANCH}") fatal "${BRANCH} must not be checked out";;
esac

# set up git
GIT_DIR=$(git rev-parse --git-dir) \
    || fatal "unable to locate .git directory"
GIT_DIR=$(cd "${GIT_DIR}" && pwd -P) \
    || fatal "unable to convert git directory to an absolute path"
GIT_INDEX_FILE=$(mktemp -u) \
    || fatal "unable to generate a temporary file name"
export GIT_DIR
export GIT_INDEX_FILE
export GIT_WORK_TREE="${dir}"

# stage the files
try cd "${dir}"
try git add -Af .

# commit the files
PARENT=$(git rev-parse --verify -q refs/heads/"${BRANCH}") \
    || warn "creating a new branch named ${BRANCH}"
TREE=$(try git write-tree) || exit 1
COMMIT_MESSAGE="Import files from ${dir}"
COMMIT=$(
    printf '%s\n' "${COMMIT_MESSAGE}" |
    try git commit-tree "${TREE}" ${PARENT:+-p "${PARENT}"}
) || exit 1

# update the branch to point to the result
try git update-ref refs/heads/"${BRANCH}" -m "commit: ${COMMIT_MESSAGE}" \
    "${COMMIT}"

# clean up
try rm -f "${GIT_INDEX_FILE}"

log "committed ${COMMIT} to ${BRANCH}"
...