Как связать файлы непосредственно с Github (raw.github.com)

Разрешено ли связывать файлы напрямую с Github?

<link rel="stylesheet" href="#" onclick="location.href='https://raw.github.com/username/project/master/style.css'; return false;"/>
<script src="https://raw.github.com/username/project/master/script.js"></script>

Я знаю, что это разрешено в Google Code. Таким образом, мне не нужно беспокоиться об обновлении локального файла.

Ответ 1

Да. Это даже безопасное обновление, если кто-то не изменит историю в git и не сделает принудительный толчок.

Другими словами, контент является версионным.

Ответ 2

Большой сервис RawGit уже упоминался, но я выложу еще один ринг: GitCDN.link

Выгоды:

  • Позволяет вам ссылаться на определенные коммиты, а также автоматически получать последние (aka master)
  • Не допускается ущерб от больших объемов трафика; RawGit спрашивает, что ссылки dev.rawgit.com будут использоваться только во время разработки, где GitCDN предоставит вам доступ к последней версии, без опасности взрыва серверов
  • Дайте вам возможность автоматизировать мини-HTML, CSS и JavaScript, или использовать его как написано (https://min.gitcdn.link).
  • Добавляет сжатие (GZip)
  • Добавляет все правильные заголовки (Content-Type, кеш-контроль, e-tag и т.д.).

Полное раскрытие информации, я поддерживаю проект в GitCDN.link

Ответ 4

Вам необходимо выполнить следующие шаги

  • Получить исходный url файла из github. Что-то вроде https://raw.githubusercontent.com/username/folder/example.css

  • Посетите http://rawgit.com/. Вставьте git url выше в поле ввода. Он будет генерировать два url, один для разработки и другой для производственной цели.

  • Скопируйте любой из них, и все готово.

Файл будет действовать как CDN. Вы также можете использовать URL-адреса gist.

Ответ 5

Вы можете напрямую ссылаться на сырые файлы, но лучше не делать этого, так как необработанные файлы всегда отправляются с помощью простого/текстового заголовка и могут вызвать проблемы с загрузкой.

Ответ 6

Добавьте ветку в свой проект с именем "gh-pages", и тогда вы (вскоре после ветвления) сможете использовать прямой URL-адрес, например https://username.github.io/project/master/style.css (используя ваш URL-адрес, и предполагая, что "style.css" - это файл в папке "master" в корне вашего репозитория "project"... и что ваша учетная запись Github - "username").

Ответ 7

GitHub Страницы: https://yourusername.github.io/script.js
Исправленные файлы GitHub repo: https://github.com/yourusername/yourusername.github.io/blob/master/script.js

Используйте страницы GitHub, НЕ используйте необработанные файлы.

Причина: страницы GitHub основаны на CDN, сырые файлы - нет. Доступ к необработанным файлам напрямую затронет серверы GitHub и увеличит нагрузку на сервер.

Ответ 8

После поиска этой же функциональности я закончил писать свой собственный PHP script, чтобы действовать как прокси. Проблема, с которой я столкнулся, даже когда вы получаете версию/ссылку RAW из Github и ссылаетесь на нее на своей собственной странице, отправленный заголовок был "text/plain", а Chrome не выполнял мой JavaScript файл из Github. Мне также не нравились другие ссылки, размещенные для использования сторонних сервисов из-за очевидных проблем безопасности/вмешательства.

Таким образом, используя этот script, я могу передать ссылку RAW из Github, установить script правильные заголовки, а затем вывести файл так, как если бы он поступал с моего собственного сервера. Этот script также можно использовать с защищенным приложением, чтобы вытащить незащищенные сценарии, не вызывая предупреждения SSL о "небезопасных ссылках".

Связь

< script src= "proxy.php? link = https://raw.githubusercontent.com/UserName/repo/master/my_script.js" > </ script >

proxy.php

<?php
###################################################################################################################
# 
# This script can take two URL variables
# 
# "type"
#   OPTIONAL
#   STRING
#   Sets the type of file that is output
# 
# "link"
#   REQUIRED
#   STRING
#   The link to grab and output through this proxy script
# 
###################################################################################################################



# First we need to set the headers for the output file
# So check to see if the type is specified first and if so, then set according to what is being requested
if(isset($_GET['type']) && $_GET['type'] != ''){
    switch($_GET['type']){
        case 'css':
            header('Content-Type: text/css');
            break;

        case 'js':
            header('Content-Type: text/javascript');
            break;

        case 'json':
            header('Content-Type: application/json');
            break;

        case 'rss':
            header('Content-Type: application/rss+xml; charset=ISO-8859-1');
            break;

        case 'xml':
            header('Content-Type: text/xml');
            break;

        default:
            header('Content-Type: text/plain');
            break;
    }

# Otherwise, try and determine what file type should be output by the file extension from the link
}else{
    # See if we can find a file type in the link specified and set the headers accordingly

    # If css file extension is found, then set the headers to css format
    if(strstr($_GET['link'], '.css') != FALSE){
        header('Content-Type: text/css');

    # If javascript file extension is found, then set the headers to javascript format
    }elseif(strstr($_GET['link'], '.js') != FALSE){
        header('Content-Type: text/javascript');

    # If json file extension is found, then set the headers to json format
    }elseif(strstr($_GET['link'], '.json') != FALSE){
        header('Content-Type: application/json');

    # If rss file extension is found, then set the headers to rss format
    }elseif(strstr($_GET['link'], '.rss') != FALSE){
        header('Content-Type: application/rss+xml; charset=ISO-8859-1');

    # If css xml extension is found, then set the headers to xml format
    }elseif(strstr($_GET['link'], '.xml') != FALSE){
        header('Content-Type: text/xml');

    # If we still haven't found a suitable file extension, then just set the headers to plain text format
    }else{
        header('Content-Type: text/plain');
    }
}

# Now get the contents of our page we're wanting
$contents = file_get_contents($_GET['link']);

# And finally, spit everything out
echo $contents;
?>

Ответ 9

Если ваш веб-сервер имеет активную allow_url_include, GitHub, обслуживающий файлы как raw plain/text, не является проблемой, поскольку вы можете сначала включить файл в скрипт PHP и изменить его заголовки на соответствующий тип MIME.