2012-04-01 14 views
7

Tengo archivos org en un repositorio github y usando project pages futuro. Exportación de archivos org a html para su uso en gh-pages de esta manera;exportar html rama diferente

  • edición de organigramas archivos en master sucursal y cometen
  • Exportación de HTML a un directorio temporal
  • cambio de rama en gh-pages
  • copiar archivos de directorio temporal y cometer

hay una manera de exportar directamente a gh-pages rama sin este ciclo export/change branch/copy?

Respuesta

2

i fijo problema con el uso submódulos git. Ahora puedo exportar mis archivos org a la carpeta bajo el repositorio master. Esta carpeta es, de hecho, un submódulo de la misma sucursal de repositorios gh-pages. Puede examinar mi org-publish-project-alist en repository y page. Ahora mi ciclo de desarrollo;

  • Editar en master luego exportar html
  • Agregar, empuje gh-pages directorio
  • Agregar, empujar en el directorio master raíz

En primer lugar he añadido gh-pages rama como se cuenta en github luego añadió gh-pages rama como submódulo:

[[email protected] org-test](gh-pages)$ git checkout master 
[[email protected] org-test](master)$ git submodule add -b gh-pages [email protected]:selman/org-test.git gh-pages 
[[email protected] org-test](master)$ git commit -m "branch added as submodule" 

Exportados index.org como html en gh-pages directorio:

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

submódulo Cambiado añadido a master:

[[email protected] gh-pages](gh-pages)$ cd .. 
[[email protected] org-test](master)$ git add . 
[[email protected] org-test](master)$ git commit -m "pages updated" 
[[email protected] org-test](master)$ git push 
2

En lugar de exportar a un directorio temporal, puede exportar a un segundo clon del repositorio (con la rama gh-pages desprotegida).

Si desea una solución más automatizada, pero compleja, puede ejecutar la siguiente secuencia de comandos después de exportar sus archivos:

#!/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() { "[email protected]" || fatal "'[email protected]' 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}" 
+0

gracias, es más automatizado que mi camino, pero todavía feo aspecto a tener dos copias de un repositorio. –

+0

@SelmanUlug: actualicé la respuesta para proporcionar una secuencia de comandos que pueda confirmar automáticamente los archivos html exportados en su rama 'gh-pages' sin tener un segundo clon. –

+0

gracias por su esfuerzo @richardhansen Creo que me arreglé con el uso de submódulos. –

Cuestiones relacionadas