2012-03-07 3 views
38

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

Я прочитал его где-нибудь, вы можете использовать архив 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 

Любая помощь будет большим. Благодарю.

ответ

6

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

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

Хорошая идея. Будет лучше, если бы я мог просто «экспортировать» его :) –

+0

Если вы находитесь в zsh, вы можете сделать это: https://gist.github.com/johnhamelink/5434938 –

-4

Для экспорта в нормальный:

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

Для почтовый архив: с

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

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

+0

@AdrianGunawan Вы не сможете экспортировать это _directly_ из GitHub, вам нужно сначала клонировать его локально. После того, как вы клонируете его локально, 'master' ссылается на название ветки. –

+2

Downvoted для игнорирования сути вопроса, как указано и под названием. – danorton

7

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

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

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

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

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

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

+1

Было бы полезно, если бы он работал для любого репозитория git, а не только для github. –

3

Если вам это нужно для именованных фиксаций (то есть ветки и метки), то вы можете использовать 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 

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

+1

Интересно, что вы упомянули тему «все ветви и метки». В самом деле, можно захотеть экспортировать легкую ветвь в другом огромном репозитории. Тем не менее, в моем git (1.9.1) 'man git-clone' имеет опцию' - [no-] single-branch' «Клонировать только историю, ведущую к кончику одной ветви» и «При создании мелкого клона с параметр -depth, это значение по умолчанию, если только -no-single-branch не задано для получения истории рядом с кончиками всех ветвей. " –

+0

@ StéphaneGourichon Yep, значения по умолчанию изменились с момента опубликования этого ответа: http://stackoverflow.com/a/9920956/239408 – xverges

50

Благодаря поддержке 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/ 

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

+0

Это работает как шарм –

+3

БОЛЬШОЕ решение. Следует отметить, что по умолчанию будет создан корневой каталог под названием trunk. Чтобы этого избежать, просто укажите альтернативное имя, например: 'svn export https: // github.com/username/projectname/trunk projectname' – Jon

+1

Спасибо @Jon, я добавил свою заметку к моему ответу! – janos

1

Я столкнулся с этой проблемой раньше, и 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

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

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 
0

Одним из способов достижения этой цели является использование поддержки SVN предложенной GIT.

Шаги для выполнения как root one (для 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-кэша, когда будет предложено сохранить пароль типа «нет» по соображениям безопасности, или он будет сохранен в незашифрованном виде.

При переводе из нотации GIT в нотацию SVN применяется следующее отображение; заменить «tree/master» на «trunk» для master заменить «tree/branch_name» на «branch/branch_name» для ветвей

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

3

Для неизвестных (мне как минимум) причин GitHub doesn't support this.

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

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

Смежные вопросы