Git экспорт из репозитория github

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

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

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

$ git archive --format=tar [email protected]: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

Любая помощь будет отличной. Спасибо.

Ответ 1

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

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

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

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

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

Создает каталог с экспортированными файлами. Невозможно создать tar/zip напрямую, вам нужно сделать это в два этапа (export + 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/

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

git clone --depth=1 [email protected]:xxx/yyy.git && rm -rf yyy/.git

Ответ 4

Если вам это нужно для именованных коммитов (это ветки и теги), вы можете использовать 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 [email protected]:xxx/yyy.git
cd yyy
git archive --format=tar release1.1 -o release1.1.tar

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

Ответ 5

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

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

Кажется глупым, поскольку с помощью SVN вы можете, но... Я подтвердил ответ @Janos.

Ответ 6

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

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

Возможны только

git clone  
github download (ZIP) button   

Ответ 7

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

ysim:~/repos$ git archive --format=tar --prefix=alembic/ --remote=ssh://[email protected]/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

Ответ 8

Один из способов добиться этого - использовать поддержку 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 применяется следующее сопоставление; заменить "tree/master" на "trunk" для master замените "tree/branch_name" на "branch/branch_name" для ветвей

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

Ответ 9

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

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

Для zip-архива:

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

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