Каков наиболее эффективный механизм (в отношении передаваемых данных и используемого дискового пространства) для получения содержимого одного файла из удаленного репозитория git?
Пока мне удалось придумать:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Это все еще кажется излишним.
Как насчет получения нескольких файлов из репо?
Ответы:
в git версии 1.7.9.5 это, кажется, работает для экспорта одного файла с удаленного
Это будет следить за содержимым файла
README.md
.источник
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
для вывода в STDOUT для трубопровода, напримерFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Вслед за Якуб «s ответ .
git archive
создает архив tar или zip, поэтому вам нужно передать вывод через tar, чтобы получить содержимое файла:Сохранит копию «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), вы можете использовать его для загрузки одного файла («сырой» или «простой» вид).
Если другая сторона включила его , вы можете использовать опцию git archive 's'
--remote=<URL>
'(и, возможно, ограничить его каталогом, в котором находится данный файл), например:источник
git config daemon.uploadarch true
удаленным репозиторием. По умолчанию git daemon отключает удаленный архив с помощью «fatal: remote error: доступ запрещен или репозиторий не экспортирован: ...»git archive
Подход был моей первой попыткой - но потом я заметил, что требованиеtar
на клиентском компьютере не совсем удобно для пользователей Windows. Мы закончили получать с нашего локальногоcgit
сервера. Это работает, но не так быстро, как хотелось бы (и все равно требует запускаunix2dos
или подобного на машинах Windows, так как мы храним файлы с окончаниями строк Unix в репозитории Git).Не в общем, но если вы используете Github:
Для меня
wget
необработанный URL оказался лучшим и самым простым способом скачать один конкретный файл.Откройте файл в браузере и нажмите кнопку «Raw». Теперь обновите ваш браузер, скопируйте URL и сделайте a
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
источник
curl https://example.com/raw.txt > savedFile.txt
Чтобы экспортировать один файл с удаленного компьютера:
Это загрузит файл
README.md
в ваш текущий каталог.Если вы хотите, чтобы содержимое файла было экспортировано в STDOUT:
Вы можете указать несколько путей в конце команды.
источник
Это выглядит как решение для меня: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
где
4
означает четыре ревизии отныне и~
является тильдой, как упомянуто в комментарии.источник
git show HEAD:./my_other_file > local_file
если файл не в вашей корневойЯ использую это
источник
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate.
To connect to raw.github.com insecurely, use '--no-check-certificate'.
Нюансированный вариант некоторых ответов здесь, который отвечает на вопрос ОП:
источник
Если ваш репозиторий поддерживает токены (например, GitLab), то сгенерируйте токен для своего пользователя, затем перейдите к файлу, который вы скачаете, и нажмите на вывод RAW, чтобы получить URL. Для загрузки файла используйте:
источник
Я решил таким образом:
Если вы хотите, вы можете заменить «BranchName» на «HEAD»
источник
Мне кажется, самый простой способ использовать следующее:
источник
Ответ Исраэля Дова прост, но не допускает сжатия. Вы можете использовать
--format=zip
, но вы не можете распаковать это напрямую с помощью команды pipe, как вы можете использовать tar, поэтому вам нужно сохранить ее как временный файл. Вот скрипт:Это работает и с каталогами.
источник
Для одного файла просто используйте команду wget.
Во-первых, следуйте приведенному ниже рисунку, чтобы щелкнуть «raw», чтобы получить URL, иначе вы загрузите код, встроенный в html.
Затем браузер откроет новую страницу с URL-адресом, начинающимся с https://raw.githubusercontent.com/ ...
просто введите команду в терминале:
Некоторое время файл будет помещен в вашу папку.
источник
Если ваш репозиторий Git размещен в Azure-DevOps (VSTS), вы можете получить один файл с помощью Rest API. .
Формат этого API выглядит следующим образом:
Например:
источник
Я использую 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-архив, но он не сработал.
Вы должны будете использовать git clone, и после того, как репозиторий будет клонирован, вам придется использовать git-архив, чтобы он работал.
Я выкладываю вопрос о том, как сделать это проще в git архиве с конкретного хеша с удаленного
источник
для bitbucket прямо из браузера (я использовал safari ...), щелкните правой кнопкой мыши «View Raw» и выберите «Download Linked File»:
источник
Если вы не возражаете против клонирования всего каталога, эта небольшая функция bash / zsh будет иметь конечный результат клонирования одного файла в текущий каталог (путем клонирования репо во временный каталог и последующего удаления его).
Pro: Вы получаете только тот файл, который хотите
Con: Вы все еще должны ждать клонирования всего репо
источник
Github Enterprise Solution
источник
GITHUB_PERSONAL_ACCESS_TOKEN
?Если ваша цель - просто загрузить файл, есть простое приложение под названием
gget
:Приведенный выше пример будет загружать один файл из
hugo
хранилища.https://github.com/dpb587/gget
источник
В связи с ответом @Steven Penny я также использую wget. Кроме того, чтобы решить, в какой файл отправлять вывод, я использую -O.
Если вы используете gitlabs, другая возможность для URL-адреса:
Если у вас нет сертификата или вы получаете доступ с доверенного сервера для установки gitlabs, вам нужен --no-check-certificate, как сказал @Kos. Я предпочитаю это, а не изменять .wgetrc, но это зависит от ваших потребностей.
Если это большой файл, вы можете использовать опцию -c с wget. Чтобы иметь возможность продолжить загрузку файла с того места, где вы его оставили, если предыдущее намерение не удалось в середине.
источник