Ответ 1
в git версии 1.7.9.5 это, похоже, работает для экспорта одного файла с удаленного
git archive --remote=ssh://host/pathto/repo.git HEAD README.md
Это будет содержать содержимое файла README.md.
Каков наиболее эффективный механизм (в отношении переданных данных и используемого дискового пространства) для получения содержимого одного файла из удаленного хранилища git?
До сих пор мне удалось найти:
git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Это все еще кажется излишним.
Как получить несколько файлов из репо?
в git версии 1.7.9.5 это, похоже, работает для экспорта одного файла с удаленного
git archive --remote=ssh://host/pathto/repo.git HEAD README.md
Это будет содержать содержимое файла README.md.
Исходя из ответа Якуба. git archive создает tar или zip архив, поэтому вам нужно передать вывод через tar, чтобы получить содержимое файла:
git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x
Сохранит копию "filename" из HEAD удаленного репозитория в текущем каталоге.
Часть :path/to/directory является необязательной. Если исключено, извлеченный файл будет сохранен в <current working dir>/path/to/directory/filename
Кроме того, если вы хотите включить использование git archive --remote в репозиториях Git, размещенных в git-daemon, вам необходимо включить опцию конфигурации daemon.uploadarch. См. Https://kernel.org/pub/software/scm/git/docs/git-daemon.html.
Если используется веб-интерфейс (например, gitweb, cgit, Gitorious, ginatra), вы можете использовать его для загрузки одного файла ( "raw" или "plain" ).
Если с другой стороны это разрешено, вы можете использовать git archive '--remote=<URL>' (и возможно ограничить его каталогом, в котором находится данный файл), например:
$ git archive [email protected]:foo/bar.git --prefix=path/to/ HEAD:path/to/ | tar xvf -
Не в общем, но если вы используете Github:
Для меня wget для сырого URL-адреса оказался лучшим и простым способом загрузки одного файла.
Откройте файл в браузере и нажмите кнопку "Raw". Обновите браузер, скопируйте URL-адрес и сделайте wget или curl.
Пример wget:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
Пример скручивания:
curl 'https://example.com/raw.txt' > savedFile.txt
Чтобы экспортировать один файл с удаленного устройства:
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
Это загрузит файл README.md в ваш текущий каталог.
Если вы хотите, чтобы содержимое файла экспортировалось в STDOUT:
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO
Вы можете указать несколько путей в конце команды.
Это выглядит как решение для меня: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
git показать HEAD ~ 4: index.html > local_file
где 4 означает четыре версии с этого момента, а ~ - тильда, как указано в комментарии.
Я использую этот
$ cat ~/.wgetrc
check_certificate = off
$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
Нюансированный вариант некоторых ответов здесь, который отвечает на вопрос ОП:
git archive [email protected]:foo/bar.git \
HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
Если ваш репозиторий поддерживает токены (например, GitLab), то сгенерируйте токен для своего пользователя, затем перейдите к файлу, который вы скачаете, и нажмите на вывод RAW, чтобы получить URL. Для загрузки файла используйте:
curl --silent --request GET --header 'PRIVATE-TOKEN: replace_with_your_token' \
'http://git.example.com/foo/bar.sql' --output /tmp/bar.sql
Ответ Исраэля Дова является простым, но он не позволяет сжатие. Вы можете использовать --format=zip, но вы не можете напрямую распаковать его с помощью команды pipe, как вы можете, с помощью tar, поэтому вам нужно сохранить ее как временный файл. Здесь a script:
#!/bin/bash
BASENAME=$0
function usage {
echo "usage: $BASENAME <remote-repo> <file> ..."
exit 1
}
[ 2 -gt "$#" ] && { usage; }
REPO=$1
shift
[email protected]
TMPFILE=`mktemp`.zip
git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE
unzip $TMPFILE
rm $TMPFILE
Это также работает с каталогами.
Для одного файла просто используйте команду wget.
Сначала следуйте рисунку ниже, чтобы щелкнуть "raw", чтобы получить URL-адрес, иначе вы загрузите код, встроенный в html.

Затем браузер откроет новую страницу с URL-адресом, начинающимся с https://raw.githubusercontent.com/...
просто введите команду в терминал:
#wget https://raw.githubusercontent.com/...
A, пока файл будет помещен в вашу папку.
Если ваш репозиторий 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
Я решил таким образом:
git archive --remote=ssh://[email protected]/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"
Я использую 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, работает на обоих.
Если вы хотите получить файл из определенного хеша + удаленного репозитория, я пробовал git -archive, и он не работал.
Вам нужно будет использовать клон git, и как только клонирование будет клонировано, вы должны использовать git -archive, чтобы он работал.
Я поставил вопрос о том, как сделать это проще в архиве git из определенного хэша с удаленного.
для bitbucket непосредственно из браузера (я использовал safari...), щелкните правой кнопкой мыши "View Raw" и выберите "Download Linked File":
Если вы не возражаете против клонирования всего каталога, эта небольшая функция bash/zsh будет иметь конечный результат клонирования одного файла в текущий каталог (путем клонирования репо во временный каталог и последующего удаления его).
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
}
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}"
Относительно ответа @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. Чтобы продолжить загрузку файла с того места, где вы его оставили, если предыдущее намерение не удалось посередине.