2011-08-24 13 views
53

मेरे पास एक github.com डेमो पृष्ठ है जो से जुड़ा हुआ है https://raw.github.com/.../master/.../file.js ताकि मुझे .js फ़ाइल को हर बार बदलकर gh-pages शाखा में कॉपी करने की आवश्यकता नहीं है।raw.github.com से जेएस सहित

SEC7112: https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js से स्क्रिप्ट माइम प्रकार बेमेल

यह शिकायत तथ्य यह है कि फाइल के साथ स्थानांतरित कर रहा है से आ रही है के कारण बंद था:

यह जो शिकायत आईई छोड़कर हर ब्राउज़र में काम करता
X-Content-Type-Options: nosniff 
Content-Type: text/plain 

जो मैं नहीं बदल सकता।

किसी के पास कोई भी विचार है कि यह वही काम कैसे पूरा किया जाए? किसी भी तरह से मुझे master शाखा में फ़ाइल को लिंक करने की इजाजत दी गई है, इसे हमेशा gh-pages शाखा में धक्का देने के बिना?

वास्तविक पेज: http://cwolves.github.com/jQuery-iMask/

(माइनर अद्यतन - मैं इस सटीक उदाहरण में gh-पृष्ठों तो आईई नहीं रह गया है टूट गया है, .js फ़ाइल शामिल करने के लिए बदल गया है, लेकिन अभी भी होगा किसी भी प्रतिक्रिया :) की तरह)

उत्तर

14

मैं आईई को छेड़छाड़ करने में आपकी मदद नहीं कर सकता, और मुझे लगता है कि आप जो कोण खोज रहे हैं उससे असंभव है (और निराश है, क्योंकि यह गिथब के कच्चे यूआरएल का उद्देश्य नहीं है)।

हालांकि, आप gh-pages में परिवर्तन करने और अपने जीवन को आसान बनाने के लिए दबाव डालकर स्वचालित कर सकते हैं। gh-pages शाखा में प्रासंगिक फ़ाइलों को स्वचालित रूप से अपडेट करने के लिए आप post-commit hook के साथ ऐसा कर सकते हैं। मैं इस तरह के एक post-commit स्क्रिप्ट है कि कुछ फ़ाइलों में परिवर्तन के लिए देखता है और उन्हें किसी अन्य शाखा के लिए प्रतिबद्ध अप पकाया गया है:,

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

ध्यान दें कि यह एक सामान्य स्क्रिप्ट है, हालांकि मैंने ऐसा उल्लेख किया config के लिए शीर्ष पर वार्स अपने प्रयोजनों। $WATCH_FILES ब्रेसिज़ | जैसे index.html|js/jquery.js द्वारा सीमित फ़ाइलों की सूची में सेट किया जा सकता है। पथ रेपो की जड़ के सापेक्ष निर्दिष्ट किया जाना चाहिए।

यदि आपके कोई प्रश्न हैं, तो मुझे बताएं, और यदि स्क्रिप्ट आपकी मदद करेगी!

5

गिथब के कच्चे यूआरएल को सामान्य वेब होस्ट के रूप में डिज़ाइन नहीं किया गया है। पेज.github.com कहने के लिए उचित होस्ट पर सामान को पुश करें।

+2

हाँ, इसके साथ समस्या यह है कि जब भी मैं पेज शाखा में स्विच करने और फ़ाइलों को कॉपी करने के लिए मास्टर करने के लिए प्रतिबद्धता करता हूं तो उसे अतिरिक्त काम की आवश्यकता होती है। मैं बस इससे बचने की कोशिश कर रहा हूं क्योंकि यह अनावश्यक –

0

मैं इसे प्राप्त करने की भी कोशिश कर रहा हूं। हालांकि, मुझे अपने कोडबेस में काम करने के लिए @ शेल्मर से समाधान नहीं मिल रहा है। नीचे है अद्यतन के बाद प्रतिबद्ध हुक स्क्रिप्ट है कि मैं का इस्तेमाल किया पाने के लिए यह काम कर रहा:

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

मैं ग्रेप के उपयोग को अद्यतन करने के लिए regex सफलतापूर्वक मिलान करने के लिए किया था (-पी ग्रेप कार्यान्वयन पर एक विकल्प शामिल नहीं किया गया विंडोज के लिए गिट बैश खोल में), git pull और git push origin $DEST_BRANCH जोड़ें। ओह, और मुझे निर्देशिकाओं और फ़ाइलों का एक खाली खोल पहले से जोड़ना पड़ा था (शायद केवल निर्देशिकाएं पर्याप्त होंगी?)।

चूंकि यह वास्तव में एक धक्का कर रहा है, मुझे लगता है कि इस स्क्रिप्ट को पोस्ट-प्रतिबद्ध के बजाय पोस्ट-प्राप्त स्क्रिप्ट होने के लिए स्विच करना बेहतर हो सकता है।अन्यथा, आप कोड को gh-पृष्ठों पर धक्का दे सकते हैं जो इसे मास्टर में कभी नहीं बनाते [यदि आप इसे धक्का नहीं चुनते हैं]।

59

आप https://rawgithub.com/ सेवा का उपयोग करने का प्रयास कर सकते हैं। rawgithub.com के साथ raw.github.com को बस बदलें।

अद्यतन

Rawgithub अब Rawgit है: https://rawgit.com/ और साथ ही एक उत्पादन cdn जोड़ा गया है।

+1

लगता है क्योंकि उस स्थिति में आप पहले से ही साइट का उपयोग कर रहे हैं जो कि जिथब से नहीं जुड़ा हुआ है, आप भी http://cdnjs.com/ –

+0

का उपयोग कर सकते हैं धन्यवाद, rawgithub सही है। –

+2

[raw.githack.com] पर एक नज़र डालें (http://raw.githack.com)। विचार एक जैसा है, लेकिन यह एक सादा-nginx समाधान है जिसका मतलब है कि इसे थोड़ा तेज़ काम करना चाहिए :) – neoascetic

6

raw.githack.com पर एक नज़र डालें। इस सेवा का विचार rawgit.com से प्रेरित है। मुझे अभी एहसास हुआ कि इस तरह की साधारण चीज़ के लिए एक संपूर्ण ढांचे (node.js + express.js) का उपयोग करना क्योंकि अनुरोध प्रॉक्सी करना अधिक है, और केवल nginx का उपयोग करके वही सामान बना दिया है।

"githubusercontent" डोमेन नाम को अपने github/gist URL में "githack" के साथ बदलें और आप कर चुके हैं!

इसके अलावा, यह bitbucket.com का समर्थन करता है - बस 0 बिटके साथ पूरे बिटबकेट डोमेन को प्रतिस्थापित करें।

संबंधित मुद्दे