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
Конечно, для этого вам нужно сначала клонировать его локально, там нет чистого пути.