从github远程存储库的git导出

我想从github远程存储库导出,而不是克隆它。 与svn export类似,我不想用它来获取.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 

任何帮助将是伟大的。 谢谢。

感谢GitHub提供的Subversion支持,你可以使用svn export获取没有任何版本控制文件的项目:

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

注意URL格式:

  • 基本的URL是https://github.com/
  • USERNAME/PROJECTNAME没有.git
  • /trunk结尾附加

这样你可以得到分支和子目录。

这将创build一个包含导出文件的目录。 无法直接创buildtar / zip,您必须分两步执行(export + zip)。 这是svn export本身的限制。

正如@Jon指出的那样,默认情况下,这将在名为trunk的目录中创build导出。 如果您愿意,您可以指定一个不同的名称:

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

您可以使用这种技术来导出项目的任何子目录。 例如,如果你只想要some/path ,你可以这样做:

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

您也可以从分支机构和标签获取path。 端点https://github.com/username/projectname完全作为一个具有常规布局的Subversion版本库,因此您可以在https://github.com/username/projectname/tags https://github.com/username/projectname/branches和tags中find分支https://github.com/username/projectname/tags

在错误地输出大的内容之前,先检查path的内容是很好的。 你可以用svn ls来做到这一点,例如:

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

通常这应该给你:

 branches/ tags/ trunk/ 

你可以用这种方法反复探索资源库。

如果你只对从GitHub出口感兴趣,那么他们提供了一个下载tar包的机制。 例如:

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

即使它说“这个版本库没有任何下载”。 你仍然可以使用button来下载主分支的tarball。

或者查看这个链接,了解链接到标签的tarball列表:

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

这应该适用于任何GitHub仓库,而不仅仅是Linux内核。

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

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

如果你需要这个命名提交(即分支和标签),那么你可以使用git clone --depth=1结合git archive

值得一提的是, git clone --depth=1克隆了所有分支和标签 (不仅是master )的所有顶级提交 。 所以做了这样一个浅的克隆后,你可以进入本地目录,并build立一个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 

所以unnless你需要导出未命名的提交ID,这可能是一个很好的解决scheme。

我认为这是不可能的GITB存储库与git存档导出。 请阅读这个

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

只有可能的方法是

 git clone github download (ZIP) button 

我遇到过同样的问题,而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界面中,您会在右侧的底部find一个说明“下载ZIP”的button; 右键单击它并复制链接地址。

下载ZIP

接下来,在命令行(我从这里得到的想法):

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

这将解压到一个名为repo-master/的目录。

如果你愿意的话,你也可以在.gitconfig别名,这样你就不必记住/input所有的东西了,例如

 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 

对于不知道(至less对我来说)原因GitHub 不支持这一点 。

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

似乎愚蠢的,因为通过SVN你可以,但是…我upvoted @Janos的答案 。

实现这一点的一个方法是使用GIT提供的SVN支持。

以root身份执行的步骤是(对于Cent OS);

 yum install git yum install subversion 

然后做一个有select的导出,应该使用下面的语法:

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

如果出于安全原因提示保存密码types“no”时未使用参数–no-auth-cache,或者将其未encryption保存。

当从GIT表示法转换为SVN表示法时,应用以下映射: 用“trunk”replace“tree / master”作为master,用branch / branch_namereplace“tree / branch_name”

这适用于文件和目录。

对于正常的出口:

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

对于一个zip存档:

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

当然,为了这个工作,你需要首先在本地克隆它,没有干净的方法。