我一直在想,是否有一个好的“gitexport”解决方案可以创建一个没有.git存储库目录的树的副本。我知道至少有三种方法:
git克隆,然后删除.git存储库目录。git签出索引暗示了这一功能,但以“只需将所需的树读入索引……”开头,我不完全确定该怎么做。gitexport是一个第三方脚本,本质上是将git克隆到临时位置,然后再将rsync--exclude='.git'复制到最终目标。
这些解决方案中没有一个让我感到满意。最接近svn导出的可能是选项1,因为两者都要求目标目录首先为空。但选项2似乎更好,假设我能够理解将树读入索引意味着什么。
如果存储库托管在GitHub上,则为特殊情况。
只需使用svn导出。
据我所知,Github不允许存档--远程。虽然GitHub是svn兼容的,而且他们确实有所有的git repos svn可访问,所以你可以像平常一样使用svn导出,只需对GitHub url进行一些调整。
例如,要导出整个存储库,请注意URL中的主干如何替换master(或项目的HEAD分支设置为什么):
svn export https://github.com/username/repo-name/trunk/
您可以导出单个文件,甚至导出某个路径或文件夹:
svn export https://github.com/username/repo-name/trunk/src/lib/folder
jQuery JavaScript库示例
HEAD分支或主分支将使用主干:
svn ls https://github.com/jquery/jquery/trunk
非HEAD分支机构可在/branches/下访问:
svn ls https://github.com/jquery/jquery/branches/2.1-stable
/tags/下的所有标签以相同的方式:
svn ls https://github.com/jquery/jquery/tags/2.1.3
我发现了选项2的含义。从存储库中,您可以执行以下操作:
git checkout-index -a -f --prefix=/destination/path/
路径结尾处的斜线很重要,否则将导致文件位于带有前缀“path”的/target中。
因为在正常情况下,索引包含存储库的内容,所以“将所需的树读入索引”没有什么特别的事情可做。它已经在那里了。
签出索引中的所有文件都需要-a标志(我不确定在这种情况下省略此标志意味着什么,因为它不能满足我的需要)。-f标志强制覆盖输出中的任何现有文件,而此命令通常不会这样做。
这似乎是我想要的那种“git导出”。
如果存储库托管在GitHub上,则为特殊情况。
只需使用svn导出。
据我所知,Github不允许存档--远程。虽然GitHub是svn兼容的,而且他们确实有所有的git repos svn可访问,所以你可以像平常一样使用svn导出,只需对GitHub url进行一些调整。
例如,要导出整个存储库,请注意URL中的主干如何替换master(或项目的HEAD分支设置为什么):
svn export https://github.com/username/repo-name/trunk/
您可以导出单个文件,甚至导出某个路径或文件夹:
svn export https://github.com/username/repo-name/trunk/src/lib/folder
jQuery JavaScript库示例
HEAD分支或主分支将使用主干:
svn ls https://github.com/jquery/jquery/trunk
非HEAD分支机构可在/branches/下访问:
svn ls https://github.com/jquery/jquery/branches/2.1-stable
/tags/下的所有标签以相同的方式:
svn ls https://github.com/jquery/jquery/tags/2.1.3