Как получить файлы из репозитория

Обновлено: 22.11.2024

Ранее из этого учебника вы узнали, что git — это инструмент, который используется для отслеживания изменений в файлах (процесс, называемый контролем версий) с помощью набора команд, которые вы можете выполнять в Терминале. Вы также узнали, что GitHub позволяет хранить файлы в облаке, чтобы получать к ним доступ с любого компьютера и делиться ими с другими.

Наличие копии набора файлов, хранящихся в репозиториях GitHub в облаке, идеально, потому что:

  1. Есть резервная копия: если с вашим компьютером что-то случится, файлы по-прежнему доступны в Интернете.
  2. Вы можете легко делиться файлами с другими людьми.
  3. Вы даже можете создать цифровой идентификатор объекта (DOI) с помощью сторонних инструментов, таких как Zenodo, чтобы цитировать ваши файлы или просить других цитировать ваши файлы. Вы также можете добавить эти DOI в свое резюме или автобиографию. для продвижения вашей работы.

Структура каталогов репозиториев

По сути, репозиторий — это каталог для определенного проекта, который определяется как репозиторий git и GitHub, поскольку он содержит подкаталог с именем .git .

Типичный репозиторий (например, название проекта) имеет следующую структуру:

  1. Файл README.md. Это файл в формате Markdown, который используется для предоставления описания репозитория (т. е. его содержимого, назначения и т. д.), чтобы другие могли узнать, как использовать файлы в репозитории.
  2. Файл .gitignore: этот файл можно использовать для списка файлов, которые вы не хотите отслеживать с помощью git (т. е. контролировать с помощью контроля версий). Вы узнаете больше об обоих этих полезных файлах позже в этой главе.

В любом случае (общедоступном или частном) URL-ссылки на репозиторий GitHub всегда имеют один и тот же формат:

Имя пользователя — это имя пользователя создателя (т. е. владельца) репозитория. Имя пользователя может быть либо физическим лицом, например eastudent (или вашим именем пользователя GitHub!), либо представлять организацию, например earthlab-education .

Например, репозитории, с которыми вы будете работать в этом учебнике, будут принадлежать earthlab-education и, таким образом, будут иметь следующие URL-адреса:

Возможность разветвления репозитория является преимуществом использования репозиториев GitHub, поскольку разветвленный репозиторий связан с исходным. Это означает, что вы (или другие пользователи) можете обновлять файлы в своем форке из исходного в ваш (или их) форкированный репозиторий. Это также означает, что вы можете предлагать изменения в исходном репозитории, которые могут быть просмотрены владельцем этого репозитория. Таким образом, разветвление позволяет вам сотрудничать с другими, защищая исходные версии файлов. При совместной работе все будут работать с копиями исходных файлов. Все изменения отслеживаются в истории каждого файла и могут быть отменены в любое время.

  1. Перейдите на страницу репозитория, которую вы хотите разветвить, например:
  1. На этой странице вы увидите кнопку в ВЕРХНЕМ ПРАВОМ углу с надписью Fork . Число рядом с этой кнопкой показывает, сколько раз репозиторий уже был разветвлен.
  2. Нажмите кнопку "Разветвить" и выберите свою учетную запись пользователя, когда она спросит вас, где вы хотите разветвить репозиторий.
  3. После разветвления репозитория его копия появится в вашем аккаунте. Перейдите на страницу репозитория. URL-адрес должен выглядеть примерно так:

Чтобы разветвить репозиторий, сначала перейдите к репозиторию, который вы хотите разветвить. Затем нажмите кнопку **fork** в правом верхнем углу экрана. Затем вы можете создать копию этого репозитория в своем аккаунте.

Позже в этом учебнике вы узнаете, как предлагать изменения в исходном репозитории, получать обновления из исходного репозитория в свою вилку и сотрудничать с другими.

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

Используйте Bash для перехода в нужный рабочий каталог

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

Для этого учебника вы клонируете репозиторий в каталог earth-analytics на своем компьютере (или где бы вы ни работали. Этот каталог earth-analytics должен находиться в домашнем каталоге вашего компьютера.

Чтобы запустить команду git clone, вам нужен URL-адрес репозитория, который вы хотите клонировать (т. е. либо репозитория, принадлежащего вам, либо созданного вами ответвления репозитория другого пользователя).

Вы можете создать локальную копию разветвленного репозитория на своем компьютере с помощью команды git clone.

Запустите команду Git Clone в Терминале

Теперь, когда у вас есть URL-адрес репозитория, который вы хотите скопировать локально, вы можете использовать терминал для запуска команды git clone, за которой следует скопированный URL-адрес:

Теперь вы создали локальную копию репозитория в вашем каталоге earth-analytics. Вы можете дважды проверить, существует ли каталог, используя команду ls в терминале.

Испытание: разветвить и клонировать репозиторий

Чтобы убедиться, что вы все сделали правильно, в bash перейдите в каталог практика-git-skillz на вашем компьютере. Тип:

Энтони Хеддингс

Энтони Хеддингс
Писатель

Энтони Хеддингс (Anthony Heddings) – штатный облачный инженер LifeSavvy Media, технический писатель, программист и эксперт по платформе Amazon AWS. Он написал сотни статей для How-To Geek и CloudSavvy IT, которые были прочитаны миллионы раз. Подробнее.

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

Скачивание одного файла с веб-сайта Github

Если вы хорошо пользуетесь веб-браузером, вы можете довольно легко загружать отдельные файлы. Перейдите к файлу, который хотите скачать, и нажмите «Raw:»

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

Файлы с кодом можно попытаться сохранить в формате .txt , который вам нужно будет исправить вручную до или после загрузки.

Загрузка из командной строки

Если вы предпочитаете использовать Git API, вы можете взаимодействовать с ним более напрямую и загружать файлы, когда вы не уверены в точном расположении файла. Вам потребуется создать личный токен доступа для использования API, которым вы можете заменить «ACCESS_TOKEN» в этом скрипте.

Конечная точка /repos///contents будет выполнять разные действия в зависимости от того, указывает ли путь на каталог или файл. Если это файл, он вернет метаданные об этом файле:

Если это каталог, он вернет все файлы и подкаталоги в массиве:

Затем вы можете использовать анализатор JSON, например jq, чтобы извлечь URL-адрес и загрузить его. Чтобы рекурсивно получить список файлов репозитория, вам потребуется получить корневое дерево.

  • › Что будет в React 18?
  • › Как развернуть сервер GitLab с помощью Docker
  • › Что нового в TypeScript 4.6?
  • › Как развернуть веб-сервер Caddy с помощью Docker
  • › CloudFoundry или Kubernetes: какую облачную платформу выбрать?
  • › Как использовать Docker для упаковки приложений CLI

Вышеупомянутая статья может содержать партнерские ссылки, которые помогают поддерживать CloudSavvy IT.

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

На данный момент мне удалось придумать:

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

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

Оу. Я был бы рад, если бы был встроенный способ сделать эквивалент «cat-remote» и «tag-remote».

У меня такая же проблема. Я хочу иметь один и тот же файл лицензии в двух репозиториях; отредактируйте файл в 1 репозитории, а затем автоматически обновите копию в другом репо.

24 ответа 24

В git версии 1.7.9.5 это работает для экспорта одного файла с удаленного компьютера

Это приведет к просмотру содержимого файла README.md .

@FrerichRaabe просто добавьте ` | tar -x` к команде. git архив --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x cat README.md

Вы можете использовать tar -xO для вывода в STDOUT для передачи по конвейеру, например. ФАЙЛ=README.md && git архив --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$ФАЙЛ"

Именно тот ответ, который я искал, но я получаю "фатальный: операция не поддерживается протоколом". в ответ от Git. Арг.

В продолжение ответа Якуба. git archive создает tar- или zip-архив, поэтому вам нужно передать вывод через tar, чтобы получить содержимое файла:

Сохранит копию 'filename' из HEAD удаленного репозитория в текущем каталоге.

Часть :path/to/directory является необязательной. Если исключить, извлеченный файл будет сохранен в /path/to/directory/filename

Если это текстовый файл, и мы хотим сохранить его в другой части, то лучше использовать: | tar -xO > ~/destfile.ext

Да. Замените HEAD идентификатором фиксации, который вы хотите использовать. HEAD — это псевдоним, который ссылается либо на текущую проверенную фиксацию (если применимо), либо на конец ветки по умолчанию. Я написал приведенный выше ответ много лет назад и сегодня утром узнал, что GitHub не поддерживает git archive, поэтому он намного менее полезен.

Если развернут веб-интерфейс (например, gitweb, cgit, Gitorious, ginatra), вы можете использовать его для загрузки одного файла ("необработанный" или "обычный" вид).

Если другая сторона включила его, вы можете использовать параметр git archive ' --remote= ' (и, возможно, ограничить его каталогом, в котором находится данный файл), например:

Для ваших собственных репозиториев вам необходимо специально включить загрузку-архив при использовании git-daemon (URL-адреса в стиле git://) с git config daemon.uploadarch true в удаленном репозитории. По умолчанию демон git отключает удаленный архив с «фатальной: удаленная ошибка: доступ запрещен или репозиторий не экспортирован:».

+1 Подход с архивированием git был моей первой попыткой, но потом я заметил, что требовать tar на клиентской машине не совсем удобно для пользователей Windows. В итоге мы получили данные с нашего локального сервера cgit. Это работает, но не так быстро, как хотелось бы (и все еще требует запуска unix2dos или аналогичного на компьютерах с Windows, поскольку мы храним файлы с окончаниями строк Unix в репозитории Git).

Не всегда, но если вы используете Github:

Для меня wget to the raw url оказался лучшим и самым простым способом загрузки одного конкретного файла.

Откройте файл в браузере и нажмите кнопку "Необработанный". Теперь обновите браузер, скопируйте URL-адрес и выполните для него команду wget или curl.

Решение запрашивается для Git, ответ подтверждает, что Github — это git и нигде не связан с git. Он основан на дополнительных API, предлагаемых известным поставщиком решений git!

Чтобы экспортировать один файл с удаленного устройства:

Это загрузит файл README.md в ваш текущий каталог.

Если вы хотите, чтобы содержимое файла экспортировалось в STDOUT:

Вы можете указать несколько путей в конце команды.

где 4 означает четыре ревизии с этого момента, а ~ – это тильда, как указано в комментарии.

Обратите внимание, что это НЕ «знак минус» «-» между «HEAD» и «4», а «тильда» «~». Видимо, я недостаточно хорошо прочитал документацию git, или мои очки нуждаются в обновлении ;-)

Убедительная просьба ко всем тем, кто проголосовал против - пожалуйста, объясните и уточните, что не так - мы здесь, чтобы учиться и делиться :)

@MichalStefanow: У Майка Веллера это есть; в частности, это не работает в удаленном репозитории. Вам нужен как минимум локальный клон, даже если вы настроили на него пульты.

Нюансированный вариант некоторых ответов здесь, который отвечает на вопрос OP:

Мне кажется, проще всего использовать следующее:

Спасибо, действительно просто. Чтобы избавиться от '?raw=true' в конце сохраненного файла, можно использовать: -O ваше-имя-файла в конце приведенной выше команды.

Если ни один другой ответ не сработал (например, ограничительный доступ к GitLab), вы можете выполнить "выборочную проверку" следующим образом:

  1. git clone --no-checkout --depth=1 --no-tags URL-адрес
  2. git restore --staged DIR-OR-FILE
  3. git checkout DIR-OR-FILE

Хотя это решение на 100 % совместимо с git, и вы можете извлечь каталог, оно не является оптимальным для диска или сети, как выполнение wget/curl для файла.

Если ваш репозиторий поддерживает токены (например, GitLab), создайте токен для своего пользователя, затем перейдите к файлу, который вы загружаете, и нажмите на вывод RAW, чтобы получить URL-адрес. Для загрузки файла используйте:

Я решил так:

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

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

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

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

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

Да, это также хорошо работает в Python или других языках программирования с функциональностью REST. Например, для загрузки модулей из разных репозиториев..

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

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

Это характерно для репозиториев git, размещенных на GitHub

Попробуйте команду 'api' приложения командной строки Github, gh , чтобы выполнить аутентифицированный вызов конечной точки Github 'получить содержимое репозитория'.

Основная команда:

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

Ответ будет представлять собой объект JSON. Если действительно указывает на файл, JSON будет включать «размер», «имя», несколько полей URL для доступа к файлу, а также поле «контент», которое представляет собой версию содержимого файла в кодировке base64.< /p>

Чтобы получить содержимое файла, вы можете свернуть значение "download_url" или просто декодировать поле "content". Вы можете сделать это, передав команду base64, например так:

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

Доступные области действия токенов личного доступа

Получить файл из репозитория

Позволяет получать информацию о файле в репозитории, такую ​​как имя, размер, содержимое. Содержимое файла имеет кодировку Base64. К этой конечной точке можно получить доступ без аутентификации, если репозиторий общедоступен.

В дополнение к методу GET вы также можете использовать HEAD для получения только метаданных файла.

Получить вину файла из репозитория

Позволяет получать информацию об обвинениях. Каждый диапазон обвинений содержит строки и соответствующую информацию о коммите.

Получить необработанный файл из репозитория

Создать новый файл в репозитории

Это позволяет создать один файл. Для создания нескольких файлов с помощью одного запроса см. API коммитов.

Обновить существующий файл в репозитории

Это позволяет обновить один файл. Для обновления нескольких файлов с помощью одного запроса см. API коммитов.

  • путь к файлу содержал /../ (попытка обхода каталога);
  • содержимое нового файла было идентично содержимому текущего файла. То есть пользователь пытался сделать пустой коммит;
  • ветвь была обновлена ​​с помощью Git push во время редактирования файла.

GitLab Shell имеет логический код возврата, не позволяющий GitLab указать ошибку.

Удалить существующий файл в репозитории

Это позволяет удалить один файл. Для удаления нескольких файлов одним запросом см. API коммитов.

Помощь и обратная связь

Редактируйте эту страницу, чтобы исправить ошибку или добавить улучшение в мерж-реквест.
Создайте задачу, чтобы предложить улучшение этой страницы.
Показывать и публиковать комментарии, чтобы просматривать и оставлять отзывы об этой странице.

Товар

Создайте проблему, если вам что-то не нравится в этой функции.
Предложите функциональность, отправив запрос функции.
Присоединяйтесь к программе First Look, чтобы помочь создавать новые функции.

Доступность функций и пробные версии продуктов

Просмотрите цены, чтобы увидеть все уровни и функции GitLab или обновиться.
Попробуйте GitLab бесплатно с доступом ко всем функциям на 30 дней.

Получить помощь

Если вы не нашли то, что искали, выполните поиск в документации.

Если вам нужна помощь с чем-то конкретным и вам нужна поддержка сообщества, опубликуйте сообщение на форуме GitLab.

При возникновении проблем с настройкой или использованием этой функции (в зависимости от вашей подписки на GitLab).

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

Получение репозитория Git

Обычно репозиторий Git можно получить одним из двух способов:

Вы можете взять локальный каталог, который в настоящее время не находится под контролем версий, и превратить его в репозиторий Git или

Вы можете клонировать существующий репозиторий Git из другого места.

В любом случае вы получите готовый к работе репозиторий Git на локальном компьютере.

Инициализация репозитория в существующем каталоге

Если у вас есть каталог проекта, который в настоящее время не находится под контролем версий, и вы хотите начать управлять им с помощью Git, вам сначала нужно перейти в каталог этого проекта. Если вы никогда этого не делали, это выглядит немного по-разному в зависимости от используемой системы:

При этом создается новый подкаталог с именем .git, содержащий все необходимые файлы репозитория — скелет репозитория Git. На данный момент в вашем проекте еще ничего не отслеживается. См. Git Internals для получения дополнительной информации о том, какие именно файлы содержатся в только что созданном каталоге .git.

Если вы хотите начать контролировать версии существующих файлов (в отличие от пустого каталога), вам, вероятно, следует начать отслеживать эти файлы и выполнить первоначальную фиксацию. Вы можете сделать это с помощью нескольких команд git add, которые указывают файлы, которые вы хотите отслеживать, за которыми следует git commit :

Через минуту мы рассмотрим, что делают эти команды. На данный момент у вас есть репозиторий Git с отслеживаемыми файлами и начальным коммитом.

Клонирование существующего репозитория

Если вы хотите получить копию существующего репозитория Git — например, проекта, в который вы хотели бы внести свой вклад, — вам нужна команда git clone . Если вы знакомы с другими системами контроля версий, такими как Subversion, вы заметите, что это команда «clone», а не «checkout». Это важное отличие — вместо того, чтобы получить только рабочую копию, Git получает полную копию почти всех данных, которые есть на сервере. Каждая версия каждого файла для истории проекта вытаскивается по умолчанию, когда вы запускаете git clone . На самом деле, если диск вашего сервера поврежден, вы часто можете использовать почти любой из клонов на любом клиенте, чтобы вернуть сервер в состояние, в котором он был, когда он был клонирован (вы можете потерять некоторые перехватчики на стороне сервера и т. д., но все версионные данные будут там — дополнительные сведения см. в разделе Получение Git на сервере).

Вы клонируете репозиторий с помощью git clone . Например, если вы хотите клонировать подключаемую библиотеку Git под названием libgit2, вы можете сделать это следующим образом:

При этом создается каталог с именем libgit2 , внутри него инициализируется каталог .git, извлекаются все данные для этого репозитория и извлекается рабочая копия последней версии. Если вы перейдете в только что созданный новый каталог libgit2, вы увидите там файлы проекта, готовые к работе или использованию.

Если вы хотите клонировать репозиторий в каталог с именем, отличным от libgit2 , вы можете указать новое имя каталога в качестве дополнительного аргумента:

Эта команда делает то же самое, что и предыдущая, но целевой каталог называется mylibgit .

Читайте также: