从github远程存储库导出git

时间:2012-03-07 22:03:34

标签: git github

我想从github远程存储库导出,而不是克隆它。与svn export类似,我不想用它获取.git文件夹。我可以通过克隆和删除.git文件夹来解决它。我想知道是否有更清洁的方式?

我在某处读到了你可以使用git archive来实现这一点。

但是我遇到了以下错误..

$ 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 个答案:

答案 0 :(得分:56)

由于GitHub支持Subversion,您可以使用svn export来获取没有任何版本控制文件的项目:

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

请注意网址格式:

  • 基本网址为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/

您可以通过这种方式迭代地浏览存储库。

答案 1 :(得分:8)

对于未知(至少对我而言)原因GitHub doesn't support this

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

看起来很傻,因为通过SVN,你可以,但......我赞成@Janos' answer

答案 2 :(得分:7)

如果您的目标是限制与服务器交换的信息数量,您是否考虑将clone--depth一起使用?您仍然需要删除(大大减少).git子目录:

git clone --depth=1 git@github.com:xxx/yyy.git && rm -rf yyy/.git

答案 3 :(得分:7)

如果您只对从GitHub导出感兴趣,那么他们会提供下载tarball的机制。例如:

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

即使它说“此存储库没有任何下载”。您仍然可以使用按钮下载主分支的tarball。

或者查看此链接以获取链接到标记的tarball列表:

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

这适用于任何GitHub存储库,而不仅仅是Linux内核。

答案 4 :(得分: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 git@github.com:xxx/yyy.git
cd yyy
git archive --format=tar release1.1 -o release1.1.tar

因此,您需要导出未命名的commit-id,这可能是一个很好的解决方案。

答案 5 :(得分:1)

我认为用git archive导出github存储库是不可能的。请阅读本文

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

只有可能的方式

git clone  
github download (ZIP) button   

答案 6 :(得分:1)

我之前遇到过同样的问题,而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

但是我找到了使用wget的GitHub的解决方法 - 所以在新的GitHub界面中,你会在右侧边栏的底部找到一个显示“Download 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"

所以你可以在shell中做这样的事情:

ysim:~/repos$ git export https://github.com/ysim/verbinski/archive/master.zip
ysim:~/repos$ ls
verbinski-master

答案 7 :(得分:0)

实现此目的的一种方法是使用GIT提供的SVN支持。

以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”时不使用参数--no-auth-cache,或者它将以未加密方式保存。

从GIT表示法转换为SVN表示法时,适用以下映射; 将“tree / master”替换为master的“trunk” 将“tree / branch_name”替换为分支的“branches / branch_name”

这适用于文件和目录。

答案 8 :(得分:0)

如果您需要在github上获取提交的压缩包,我认为这是最简单的方法:

说您的存储库名称是 https://github.com/arielgabizon/librustzcash

,提交ID为 4be41ca6160c16abfd983c8c878b6ea04105b224

只需在浏览器中转到该地址 https://github.com/arielgabizon/librustzcash/archive/4be41ca6160c16abfd983c8c878b6ea04105b224.tar.gz

,并且至少在google chrome上,它将开始下载文件。

答案 9 :(得分:-4)

对于正常导出:

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

对于 zip 存档:

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

当然,为了实现这一点,你需要首先在本地克隆它,没有 clean 方法。