Para las páginas en github.io, es común usar una rama llamada gh-pages en el repositorio principal para publicar un sitio web asociado con un repositorio en particular.

En mi proyecto actual, realizo los siguientes pasos para actualizar mi documentación que está alojada en github.io.

  1. Cree documentación de API en la rama principal utilizando Doxygen.
  2. Mueva el directorio html a un directorio temporal.
  3. Consulte la sucursal gh-pages.
  4. Copie el contenido del directorio temporal en el directorio del proyecto.
  5. git commit y git push la rama gh-pages.
  6. Vuelva a pagar la sucursal master.

¿Es posible enviar el contenido del directorio html a la rama gh-pages en un solo paso?

Tenga en cuenta que prefiero no agregar el contenido del directorio html a la rama master porque es contenido generado en lugar de fuente.

Ya miré esta pregunta y esta pregunta, pero no parece que resuelvan esto problema.

En realidad, esto no es un duplicado de esta pregunta porque esta pregunta se refiere al reemplazo de todo el árbol en lugar de agregar un solo archivo, y creo que la primera operación se puede hacer de una manera más limpia que la segunda.

1
merlin2011 13 dic. 2016 a las 06:34

2 respuestas

La mejor respuesta

He escrito el siguiente script para evitar el uso de un directorio de trabajo adicional, aunque la respuesta de @ axiac es una forma válida de resolver este problema.

#!/bin/bash

# This script will take a directory and replace the contents of a non-current
# branch with it.
if [ "$#" -ne 3 ]; then
    echo \
    "Usage:  replace-branch <top level directory> <branchname> <commit message>"
    exit
fi

root="$1"
branch="$2"
msg="$3"

# First check if the index is polluted, since we will be using it.
save=HEAD
indexDiverges=$(git diff-index --cached  $(git rev-parse HEAD))
if [[ -n "$indexDiverges" ]]; then
    save=$(git write-tree)
fi

# Create a new index
git read-tree --empty
GIT_WORK_TREE=$root git add .

# Check whether the index is actually different from the target.
isDuplicateCommit=$(git diff-index --cached  $(git rev-parse $branch))
if [[ ! -n "$isDuplicateCommit" ]]; then
    echo "The branch already matches the state we are trying to commit!"
    git read-tree $save
    exit
fi

# Write the index out to a new tree
tree=$(git write-tree)

# Commit with the given commit message to the other branch
commithash=$(echo "$msg" | git commit-tree $tree -p $(git rev-parse $branch))

# Move the branch pointer.
git update-ref $(git show-ref --heads "$branch"  | awk '{print $2}') \
    "$commithash"

# Restore the index to its previous state
git read-tree $save

También he decidido actualizarlo un poco y ponerlo en GitHub con un ejemplo de uso.

0
approxiblue 22 dic. 2016 a las 02:36

Clone su repositorio remoto nuevamente en un nuevo repositorio local. Verifique la rama gh_pages en este nuevo repositorio.

Use el repositorio que ya tiene para el desarrollo, de la misma manera que lo está usando ahora.

Cree la documentación de la API en la rama principal del repositorio de desarrollo utilizando Doxygen como lo hace ahora. Si es posible, configure el proceso para producir la salida en el directorio donde se almacena el segundo repositorio local. De lo contrario, mueva la documentación generada al segundo repositorio local después de su creación.

Ejecute git add .; git commit; git push en el segundo repositorio (el repositorio de documentación).

Repite los dos últimos pasos cada vez que sea necesario.

1
axiac 21 dic. 2016 a las 09:38