我想从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
任何帮助都会很棒。感谢。
答案 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”的按钮;右键单击它并复制链接地址。
接下来,在命令行中(我从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 方法。