2011-08-24 10 views
53

Tengo una página de demostración de github.com que está enlazando a https://raw.github.com/.../master/.../file.js para que No es necesario que siempre copie el archivo .js en la rama gh-pages cada vez que se modifique. Esto funciona en todos los navegadores excepto IE, que se queja:Incluyendo js desde raw.github.com

SEC7112: Guión de https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js se bloquea debido a tipo mime desajuste

Esta queja proviene del hecho de que el archivo se transfiere con:

X-Content-Type-Options: nosniff 
Content-Type: text/plain 

que no puedo cambiar.

¿Alguien tiene alguna idea de cómo lograr esto mismo? De alguna manera, ¿me permite vincular al archivo en la rama master sin tener que presionarlo siempre en la rama gh-pages?

páginas real: http://cwolves.github.com/jQuery-iMask/

(actualización menor - He cambiado la GH-páginas en este caso exacta para incluir el archivo .js, por lo que IE ya no está roto, pero todavía desea cualquier comentario :))

Respuesta

14

No puedo ayudarte con el truco de IE, y creo que desde ese ángulo lo que estás buscando es imposible (y desalentado, ya que ese no es el propósito de las URL sin formato de Github).

Sin embargo, puede automatizar la realización de los cambios en gh-pages y presionar para hacer su vida más fácil. Puede hacerlo con un post-commit hook para actualizar automáticamente los archivos relevantes en la rama gh-pages. Yo he cocinado un guión tan post-commit que vela por cambios en ciertos archivos y los compromete a otra rama:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

Tenga en cuenta que este es un script en general, aunque he especificado el variables de configuración en la parte superior para su propósitos. $WATCH_FILES se puede establecer en una lista de archivos delimitados por llaves | como index.html|js/jquery.js. Las rutas deben especificarse en relación con la raíz del repositorio.

¡Avíseme si tiene alguna pregunta y si la secuencia de comandos lo ayuda!

5

Las URL sin formato de Github no están diseñadas para ser un host web genérico. Empuja esa cosa al host adecuado, como decir pages.github.com.

+2

Sí, el problema es que requiere un trabajo adicional cada vez que me comprometo a dominar para cambiar a las páginas de la rama y copiar los archivos. Estoy tratando de evitar esto ya que parece innecesario –

0

También estoy tratando de lograr esto. Sin embargo, parece que no puedo obtener la solución de @shelhamer para trabajar en mi base de código. A continuación se muestra el mensaje-commit script gancho actualizado que he utilizado para conseguir que funcione:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

que tenía que actualizar el uso de grep para que coincida con la expresión regular con éxito (-P no era una opción sobre la aplicación grep incluido en shell de Git Bash para Windows), agregue un git pull y un git push origin $DEST_BRANCH. Ah, y tuve que agregar un shell vacío de los directorios y archivos de antemano (tal vez solo los directorios hubieran sido suficientes?).

Dado que esto realmente está haciendo un esfuerzo, creo que puede ser mejor cambiar esta secuencia de comandos a una secuencia de comandos posterior a la recepción en lugar de post-confirmación.De lo contrario, podría estar presionando el código en páginas gh que nunca lo convirtieron en maestro [si elige no presionarlo].

59

Puede intentar usar el servicio https://rawgithub.com/. Simplemente reemplace raw.github.com con rawgithub.com.

ACTUALIZACIÓN

Rawgithub es ahora Rawgit: https://rawgit.com/ y ha añadido una cdn producción también.

+1

Dado que en ese caso ya estarías usando un sitio no afiliado con github, también podrías usar http://cdnjs.com/ –

+0

Gracias, rawgithub es perfecto. –

+2

También echa un vistazo a [raw.githack.com] (http://raw.githack.com). La idea es la misma, pero es una solución plain-nginx lo que significa que debería funcionar un poco más rápido :) – neoascetic

6

Eche un vistazo a raw.githack.com. La idea de este servicio está inspirada en rawgit.com. Me acabo de dar cuenta de que el uso de un marco completo (node.js + express.js) para algo tan simple como las solicitudes de proxy es overkilling, e hizo lo mismo usando nginx solamente.

Reemplace el fragmento de nombre de dominio "githubusercontent" en su URL github/gist con "githack" y listo!

Además, es compatible con bitbucket.com - simplemente reemplace todo el dominio bitbucket con bb.githack.com.

Cuestiones relacionadas