从github远程存储库导出git

Adr*_*wan 45 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
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒.谢谢.

Sto*_*ica 58

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

svn export https://github.com/user/project/trunk
Run Code Online (Sandbox Code Playgroud)

请注意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
Run Code Online (Sandbox Code Playgroud)

您可以使用此技术导出项目的任何子目录.例如,如果您只想要some/path,您可以:

svn export https://github.com/username/projectname/trunk/some/path local-dir-name
Run Code Online (Sandbox Code Playgroud)

您也可以从分支和标签中获取路径.端点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/
Run Code Online (Sandbox Code Playgroud)

通常这应该给你:

branches/
tags/
trunk/
Run Code Online (Sandbox Code Playgroud)

您可以通过这种方式迭代地探索存储库.


LAF*_*ica 8

对于未知(至少对我来说)原因,GitHub 不支持这一点.

We don’t support people running git-archive against our servers.
Run Code Online (Sandbox Code Playgroud)

看起来很傻,因为通过SVN,你可以,但......我赞成了@Janos的回答.


Sam*_*ieu 7

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

git clone --depth=1 git@github.com:xxx/yyy.git && rm -rf yyy/.git
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

即使它说"这个存储库没有任何下载." 您仍然可以使用按钮下载主分支的tarball.

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

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

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


Jar*_*arl 5

如果你需要这个命名提交(即分支和标签),那么你可以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
Run Code Online (Sandbox Code Playgroud)

所以除非你需要导出未命名的提交 ID,否则这可能是一个很好的解决方案。