我一直在想,是否有一个好的“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_WORK_TREE=输出目录数字检出-f

如果您使用git存储库管理网站,并且希望在/var/www/中签出一个干净的版本,这一点特别有用。在这种情况下,将此命令添加到.git/hook/post-rereceive脚本中(在裸存储库上使用hook/post-Rereceive,这更适合这种情况)

我只是想指出,如果你是

导出存储库的子文件夹(这就是我使用SVN导出功能的方式)可以将该文件夹中的所有内容复制到部署目标因为您已经有了整个存储库的副本。

然后,您可以只使用cpfoo[destination]而不是前面提到的gitarchive-master foo|-x-C[destination。

这将复制除.dot文件之外的所有内容。我使用这个将git克隆项目导出到我的web应用程序的git repo中,而不使用.git文件。

cp-R/git repo/path/to/destination的路径/

简单的旧bash非常有用:)

如果您也需要子模块,这应该可以做到:https://github.com/meitar/git-archive-all.sh/wiki

简单到克隆,然后删除.git文件夹:

git克隆url_of_your_repo路径到导出&&rm-rf路径到导出/.git