从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; 右键单击它并复制链接地址。
接下来,在命令行(我从这里得到的想法):
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
当然,为了这个工作,你需要首先在本地克隆它,没有干净的方法。