Как я могу извлечь один файл из GitHub без клонирования всего хранилища? - PullRequest
6 голосов
/ 08 сентября 2011

На производственном компьютере я хочу извлечь конкретный файл с определенной ревизией из GitHub, чтобы облегчить миграцию базы данных.Я не хочу извлекать (или даже клонировать) весь репозиторий исходного кода (потому что это моя производственная среда).Как вытащить только тот файл, который я ищу?

Ответы [ 3 ]

11 голосов
/ 02 августа 2012

Я делаю это для магистралей, вот так

curl -O https://raw.github.com/documentcloud/backbone/master/backbone-min.js
3 голосов
/ 17 февраля 2016

Мое решение как в первом посте. Но я пытаюсь объяснить немного больше. На GitHub есть кнопка «Raw» для каждого файла - в браузере будет отображаться просто текст. Кроме того, вы можете использовать этот URL.

Например, у меня репо https://github.com/MasterSergius/conf_files.git И я хочу получить мой файл .vimrc, поэтому вот ссылка на мой файл: https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc Я думаю, что по этому шаблону вы даже можете угадать URL файла по репо и полный путь к файлу. Итак, теперь я могу скачать его с помощью curl:

curl https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc -o ~/.vimrc
3 голосов
/ 18 января 2012

Насколько я могу судить, загрузка одного файла из репозитория git, обслуживаемого через http, в настоящее время невозможна. Я считаю, что GitHub имеет отдельную функцию «загрузки», которую они хотят, чтобы люди использовали вместо нее (но я не знаю, будет ли он поддерживать загрузку одного файла).

Обходной путь - клонировать весь репозиторий (!) И затем извлечь интересующий файл. Вот функция bash, которая выполняет эту работу:

git-cat() {
    if  [ -z "$1" -o -z "$2" ]; then
        echo "Usage: git-cat REPO_URL FILE [BRANCH]"
        exit 1
    fi
    tmprepo=`mktemp -d -t gitrepo.XXXXXX`
    reponame=$1
    filename=$2
    branchname=$3
    if [ -z "$branchname" ]; then
        branchname="master"
    fi
    git clone -nq $reponame $tmprepo &&
    git --git-dir $tmprepo/.git show ${branchname}:${filename} &&
    rm -rf $tmprepo
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...