Получить один файл из хранилища - PullRequest
196 голосов
/ 14 июля 2009

Какой самый эффективный механизм (в отношении передаваемых данных и используемого дискового пространства) для получения содержимого одного файла из удаленного хранилища git?

Пока мне удалось придумать:

git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

Это все еще кажется излишним.

А как насчет получения нескольких файлов из репо?

Ответы [ 19 ]

1 голос
/ 16 сентября 2018

Если ваш репозиторий Git размещен в Azure-DevOps (VSTS), вы можете получить один файл с помощью Rest API .

Формат этого API выглядит следующим образом:

 https://dev.azure.com/{organization}/_apis/git/repositories/{repositoryId}/items?path={pathToFile}&api-version=4.1?download=true

Например:

 https://dev.azure.com/{organization}/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&download=true&api-version=4.1
1 голос
/ 22 сентября 2018

Я решил таким образом:

git archive --remote=ssh://git@gitlab.com/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name

Если хотите, вы можете заменить «BranchName» на «HEAD»

1 голос
/ 16 июня 2017

Для одного файла, просто используйте команду wget.

Во-первых, следуйте рисунку ниже, чтобы щелкнуть «raw», чтобы получить URL, в противном случае вы загрузите код, встроенный в html. enter image description here

Затем браузер откроет новую страницу с URL, начинающимся с https://raw.githubusercontent.com/...

просто введите команду в терминале:

#wget https://raw.githubusercontent.com/...

А пока файл будет помещен в вашу папку.

0 голосов
/ 04 июня 2019

Github Enterprise Solution

HTTPS_DOMAIN=https://git.your-company.com
ORGANISATION=org
REPO_NAME=my-amazing-library
FILE_PATH=path/to/some/file
BRANCH=develop
GITHUB_PERSONAL_ACCESS_TOKEN=<your-access-token>

URL="${HTTPS_DOMAIN}/raw/${ORGANISATION}/${REPO_NAME}/${BRANCH}/${FILE_PATH}"

curl -H "Authorization: token ${GITHUB_PERSONAL_ACCESS_TOKEN}" ${URL} > "${FILE_PATH}"
0 голосов
/ 28 октября 2018

Если вы не возражаете против клонирования всего каталога, эта маленькая функция bash / zsh будет иметь конечный результат клонирования одного файла в ваш текущий каталог (путем клонирования репо во временный каталог и последующего удаления его). 1001 *

Pro: вы получаете только тот файл, который вам нужен

Con: Вы все еще должны подождать, пока весь репо клонируется

git-single-file () {
        if [ $# -lt 2 ]
        then
                echo "Usage: $0 <repo url> <file path>"
                return
        fi
        TEMP_DIR=$(mktemp -d)
        git clone $1 $TEMP_DIR
        cp $TEMP_DIR/$2 .
        rm -rf $TEMP_DIR
}
0 голосов
/ 30 августа 2018

для bitbucket непосредственно из браузера (я использовал safari ...), щелкните правой кнопкой мыши «View Raw» и выберите «Скачать связанный файл»:

enter image description here

0 голосов
/ 19 июня 2014

Относительно ответа @Steven Penny, я также использую wget. Кроме того, чтобы решить, в какой файл отправлять вывод, я использую -O.

Если вы используете gitlabs, другая возможность для URL-адреса:

wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>

Если у вас нет сертификата или вы получаете доступ с доверенного сервера для установки gitlabs, вам нужно --no-check-certificate, как сказал @Kos. Я предпочитаю это, а не изменять .wgetrc, но это зависит от ваших потребностей.

Если это большой файл, вы можете использовать опцию -c с wget. Чтобы иметь возможность продолжить загрузку файла с того места, где вы его оставили, если предыдущее намерение не удалось в середине.

0 голосов
/ 15 декабря 2016

Если вы хотите получить файл из определенного хэша + удаленный репозиторий, я пробовал git-архив, но он не работал.

Вы должны будете использовать git clone, и как только репозиторий будет клонирован, вам придется использовать git-архив, чтобы он работал.

Выкладываю вопрос о том, как сделать это проще в архиве git из определенного хеша с удаленного

0 голосов
/ 04 июня 2015

Я использую curl, он работает с общедоступными репозиториями или с обычными аутентификациями https через веб-интерфейс.

curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD

Я тестировал его на github и bitbucket, работает на обоих.

...