2012-04-01 3 views
7

githubリポジトリにorgファイルがあり、今後 project pagesを使用しています。 gh-pagesのようにorgファイルを にエクスポートするとhtmlになります。一時ディレクトリからファイルをコピーし、 html別のブランチをエクスポートする

を犯しgh-pages

  • への分岐を変更

    • 編集組織masterブランチ上のファイルや一時ディレクトリにHTMLをエクスポートする
    • を犯し
    • は方法があります このexport/change branch/copyサイクルなしgh-pages枝に直接エクスポートしますか?

  • 答えて

    2

    私はGitのサブモジュールを使用して問題を修正。これで、私のorgファイルをmasterリポジトリのフォルダにエクスポートできます。このフォルダは実際には同じリポジトリのサブモジュールgh-pagesブランチです。私のorg-publish-project-alistrepositorypageで調べることができます。今私の開発サイクル。 master

    • 編集githubに語ったとして、その後のhtml
    • gh-pagesディレクトリにプッシュ
    • が追加、追加エクスポート、masterルートディレクトリにプッシュ

    は、まず私がgh-pagesブランチを添加しgh-pagesブランチを追加しましたサブモジュールとして:

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

    gh-pagesディレクトリにhtmlとしてindex.orgをエクスポート:

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

    変更サブモジュールは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

    一時ディレクトリにエクスポートする代わりに、gh-pagesブランチがチェックアウトされた状態で、リポジトリの2番目のクローンにエクスポートできます。

    あなたがより自動化されたが、複雑なソリューションをしたい場合は、あなたがあなたのファイルをエクスポートした後、次のスクリプトを実行することができます

    #!/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

    おかげで、それは私の方法よりも自動化されているが、まだリポジトリの2つのコピーを持つように醜い探しています。 –

    +0

    @SelmanUlug:2番目のクローンを持たずに、エクスポートされたhtmlファイルを 'gh-pages'ブランチに自動的にコミットできるスクリプトを提供するための答えを更新しました。 –

    +0

    あなたの努力に感謝@ richardhansen私はサブモジュールを使って自分自身を修正したと思います。 –

    関連する問題