экспорт git из удаленного репозитория github - PullRequest
44 голосов
/ 08 марта 2012

Я бы хотел экспортировать из удаленного репозитория github, а не клонировать его. Подобно экспорту SVN, я не хочу, чтобы получить папку .git с ним. Я могу обойти это путем клонирования и удаления папки .git. Интересно, есть ли более чистый способ?

Я где-то читал, что для этого можно использовать git архив.

Однако я получил следующие ошибки ..

$ git archive --format=tar --remote=git@github.com:xxx/yyy.git master | tar -xf -

Invalid command: 'git-upload-archive 'xxx/yyy.git''
You appear to be using ssh to clone a git:// URL.
Make sure your core.gitProxy config option and the
GIT_PROXY_COMMAND environment variable are NOT set.
fatal: The remote end hung up unexpectedly

Любая помощь была бы великолепна. Спасибо.

Ответы [ 10 ]

56 голосов
/ 20 августа 2013

Благодаря поддержке Subversion от GitHub вы можете использовать svn export, чтобы получить проект без каких-либо файлов контроля версий:

svn export https://github.com/user/project/trunk

Обратите внимание на формат URL:

  • Базовый URL-адрес https://github.com/
  • USERNAME/PROJECTNAME без .git
  • /trunk добавляется в конце

Таким образом, вы также можете получить ветки и подкаталоги.

Это создает каталог с экспортированными файлами. Невозможно создать tar / zip напрямую, вы должны сделать это в два шага (экспорт + zip). Это ограничение самого svn export.

Как указал @ Jon , это создаст экспорт в каталог с именем trunk по умолчанию. Вы можете указать другое имя, если предпочитаете:

svn export https://github.com/username/projectname/trunk projectname

Вы можете использовать эту технику для экспорта любого подкаталога проекта. Например, если вы хотите только some/path, вы можете сделать:

svn export https://github.com/username/projectname/trunk/some/path local-dir-name

Вы также можете получить пути из веток и тегов. Конечная точка https://github.com/username/projectname ведет себя полностью как хранилище Subversion с обычной разметкой, поэтому вы найдете ветки в https://github.com/username/projectname/branches и теги в https://github.com/username/projectname/tags.

Прежде чем по ошибке экспортировать что-то большое, хорошо сначала проверить содержимое пути. Вы можете сделать это, используя svn ls, например:

svn ls https://github.com/username/projectname/

Обычно это должно дать вам:

branches/
tags/
trunk/

Вы можете итеративно исследовать хранилище таким образом.

8 голосов
/ 28 марта 2017

По неизвестным (по крайней мере мне) причинам GitHub не поддерживает это .

We don’t support people running git-archive against our servers.

Кажется глупым, потому что через SVN вы можете, но ... Я проголосовал @ Janos 'ответ .

7 голосов
/ 08 марта 2012

Если вы заинтересованы только в экспорте из GitHub, тогда они предоставляют механизм для загрузки тарболлов. Например:

https://github.com/torvalds/linux/downloads

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

Или посмотрите эту ссылку для просмотра списка тарболлов, связанных с тегами:

https://github.com/torvalds/linux/tags

Это должно работать для любого репозитория GitHub, а не только для ядра Linux.

7 голосов
/ 08 марта 2012

Если ваша цель - ограничить количество информации, передаваемой на сервер, рассматривали ли вы возможность использования clone с --depth? Вам все равно нужно удалить (значительно уменьшенный) подкаталог .git, хотя:

git clone --depth=1 git@github.com:xxx/yyy.git && rm -rf yyy/.git
4 голосов
/ 11 октября 2012

Если вам это нужно для именованных коммитов (то есть веток и тегов), тогда вы можете использовать git clone --depth=1 в сочетании с git archive

Стоит знать, что git clone --depth=1 клонирует все топ-коммиты по всем веткам и тегам (не только master). Поэтому после такого мелкого клона вы можете войти в локальный каталог и сделать git archive --format=tar tag_to_be_exported.

Так что если вы хотите экспортировать тег release1.1

git clone --depth=1 git@github.com:xxx/yyy.git
cd yyy
git archive --format=tar release1.1 -o release1.1.tar

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

1 голос
/ 30 сентября 2013

Я сталкивался с этой же проблемой раньше, и AFAICT, похоже, работает только с Bitbucket, например,

ysim:~/repos$ git archive --format=tar --prefix=alembic/ --remote=ssh://git@bitbucket.org/zzzeek/alembic.git master | tar -xf -
ysim:~/repos$ ls
alembic

Но я нашел обходной путь для GitHub с помощью wget - так что в новом интерфейсе GitHubВы найдете кнопку с надписью «Скачать ZIP» в нижней части правой боковой панели;щелкните по нему правой кнопкой мыши и скопируйте адрес ссылки.

Download ZIP

Далее в командной строке (я получил идею от здесь ):

wget -qO- -O tmp.zip <zipball url> && unzip tmp.zip && rm tmp.zip

Это распакует его вкаталог называется что-то вроде repo-master/.

Если вы хотите, вы также можете использовать псевдоним в своем .gitconfig, чтобы вам не приходилось запоминать / печатать все это, например,

export = "! f() { wget -qO- -O tmp.zip \"$1\" && unzip tmp.zip && rm tmp.zip; }; f"

Так что вы можете просто сделатькак то так в оболочке:

ysim:~/repos$ git export https://github.com/ysim/verbinski/archive/master.zip
ysim:~/repos$ ls
verbinski-master
1 голос
/ 10 апреля 2013

Я думаю, что невозможно экспортировать репозиторий github с архивом git. Пожалуйста, прочитайте это

https://help.github.com/articles/can-i-archive-a-repository

Только возможные пути

git clone  
github download (ZIP) button   
0 голосов
/ 19 ноября 2018

Если вам нужно получить архив коммита на github, я думаю, что это самый простой способ:

Скажите, что ваше имя репозитория https://github.com/arielgabizon/librustzcash

и идентификатор коммита 4be41ca6160c16abfd983c8c878b6ea04105b224

Просто перейдите в браузере по адресу https://github.com/arielgabizon/librustzcash/archive/4be41ca6160c16abfd983c8c878b6ea04105b224.tar.gz

и, по крайней мере, в Google Chrome, он начнет скачивать файл.

0 голосов
/ 13 октября 2015

Один из способов добиться этого - использовать поддержку SVN, предлагаемую GIT.

Шаги, выполняемые как root, (для Cent os);

yum install git

yum install subversion

Затем для выборочного экспорта должен использоваться следующий синтаксис:

svn export  <git repository>/<source folder> <empty target folder>  --no-auth-cache --force --username <active directory username>

Если вы не используете параметр --no-auth-cache при появлении запроса на сохранение пароля типа «нет» по соображениям безопасности, или он будет сохранен в незашифрованном виде.

При переводе из записи GIT в запись SVN применяется следующее отображение; замените "дерево / мастер" на "ствол" для мастера замените «имя дерева / ветви» на «ветви / имя ветви» для веток

Это работает как для файлов, так и для каталогов.

0 голосов
/ 08 марта 2012

Для нормального экспорта:

$ git archive master | tar -x -C /path/to/destination

Для zip архива:

$ git archive --format zip --output /path/to/destination/file.zip master

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...