我一直在想,是否有一个好的“gitexport”解决方案可以创建一个没有.git存储库目录的树的副本。我知道至少有三种方法:
git克隆,然后删除.git存储库目录。git签出索引暗示了这一功能,但以“只需将所需的树读入索引……”开头,我不完全确定该怎么做。gitexport是一个第三方脚本,本质上是将git克隆到临时位置,然后再将rsync--exclude='.git'复制到最终目标。
这些解决方案中没有一个让我感到满意。最接近svn导出的可能是选项1,因为两者都要求目标目录首先为空。但选项2似乎更好,假设我能够理解将树读入索引意味着什么。
对于GitHub用户,gitarchive--remote方法无法直接工作,因为导出URL是短暂的。您必须向GitHub请求URL,然后下载该URL。卷曲使这变得容易:
curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | tar xzf -
这将在本地目录中提供导出的代码。例子:
$ curl -L https://api.github.com/repos/jpic/bashworks/tarball | tar xzf -
$ ls jpic-bashworks-34f4441/
break conf docs hack LICENSE mlog module mpd mtests os README.rst remote todo vcs vps wepcrack
编辑如果您希望将代码放入特定的现有目录(而不是github中的随机目录):
curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | \
tar xzC /path/you/want --strip 1
可能最简单的方法是使用git存档。如果你真的只需要扩展的树,你可以这样做。
git archive master | tar -x -C /somewhere/else
大多数时候,我需要从git中“导出”一些东西,无论如何,我都需要一个压缩的存档,所以我会这样做。
git archive master | bzip2 >source-tree.tar.bz2
ZIP存档:
git archive --format zip --output /full/path/to/zipfile.zip master
git帮助存档,它非常灵活。
请注意,即使存档文件不包含.git目录,但它也会包含其他隐藏的特定于git的文件,如.gitignore、.gitattributes等。如果您不希望它们在存档文件中,请确保在.gitattr文件中使用export-ignore属性,并在进行存档之前提交该属性。阅读更多。。。
注意:如果您对导出索引感兴趣,命令是
git checkout-index -a -f --prefix=/destination/path/
(更多详情请参见Greg的回答)