我一直在想,是否有一个好的“gitexport”解决方案可以创建一个没有.git存储库目录的树的副本。我知道至少有三种方法:

git克隆,然后删除.git存储库目录。git签出索引暗示了这一功能,但以“只需将所需的树读入索引……”开头,我不完全确定该怎么做。gitexport是一个第三方脚本,本质上是将git克隆到临时位置,然后再将rsync--exclude='.git'复制到最终目标。

这些解决方案中没有一个让我感到满意。最接近svn导出的可能是选项1,因为两者都要求目标目录首先为空。但选项2似乎更好,假设我能够理解将树读入索引意味着什么。


当前回答

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

其他回答

我为git签出索引编写了一个简单的包装器,您可以这样使用:

git export ~/the/destination/dir

如果目标目录已经存在,则需要添加-f或--force。

安装简单;只需将脚本放到PATH中的某个位置,并确保它是可执行的。

git导出的github存储库

到目前为止,我看到的最简单的方法(也适用于windows)是gitbundle:

git bundle create/some/bundle/path.bundle--全部

有关更多详细信息,请参阅以下答案:如何通过usb驱动器将git存储库从windows机器复制到linux机器?

是的,这是一个干净整洁的命令,可以将代码归档,而不在归档中包含任何git,并且可以在不担心任何git提交历史的情况下传递。

git archive --format zip --output /full/path/to/zipfile.zip master 

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

如果你想要一些与子模块一起工作的东西,这可能值得一试。

注:

MASTER_DIR=同时检出子模块的检出DEST_DIR=此导出的结束位置如果你有rsync,我想你可以用更少的球疼做同样的事情。

假设:

您需要从MASTER_DIR的父目录(即MASTER_DIRcd..)运行此命令DEST_DIR假定已创建。如果需要,这很容易修改为包含DEST_DIR的创建

cd MASTER_DIR&&tar-zcvf/DEST_DIR/export.tar.gz--exclude='.git*'.&&cd/DEST_DIR/&&tar xvfz导出.tar.gz&&rm导出.tar.gif