html export different branch

I have org files in a github repository and using project pages future. Exporting org files to html for use in gh-pages like this;

  • editing org files on master branch and committing
  • exporting html to a temporary directory
  • changing branch to gh-pages
  • copying files from temporary directory and committing
  • is there a way of exporting directly to gh-pages branch without this export/change branch/copy cycle?


    Instead of exporting to a temporary directory, you could export into a second clone of the repository (with the gh-pages branch checked out).

    If you want a more automated but complex solution, you can run the following script after exporting your files:

    #!/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 '%sn' "$*"; }
    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 '%sn' "${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}"
    

    I fixed problem with using git submodules. Now I can export my org files to folder under master respository. This folder is in fact a submodule of same repositories gh-pages branch. You can examine my org-publish-project-alist in repository and page. Now my development cycle;

  • Edit in master then export html
  • Add, push in gh-pages directory
  • Add, push in master root directory
  • Firstly I added gh-pages branch as told in github then added gh-pages branch as submodule:

    [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"
    

    Exported index.org as html to gh-pages directory:

    [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
    

    Changed submodule added to 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
    
    链接地址: http://www.djcxy.com/p/58658.html

    上一篇: 像gdb这样的调试器如何通过JTAG设置断点?

    下一篇: html导出不同的分支