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

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

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


当前回答

这将把一系列提交(C到G)中的文件复制到tar文件中。注意:这只会提交文件。不是整个存储库。此处略有修改

提交历史记录示例

A-->B-->C-->D-->E-->F-->G-->H-->I

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT C~..G | xargs tar -rf myTarFile.tar

git diff树手册页

-r-->递归到子树中

--nocommit-id-->gitdiff树在适用时输出带有commit-id的行。此标志抑制了提交ID输出。

--name only-->仅显示已更改文件的名称。

--diff filter=ACMRT-->仅选择这些文件。请参阅此处以获取文件的完整列表

C..G-->此提交范围内的文件

C~-->包括提交C中的文件。不仅仅是提交C之后的文件。

|xargs tar-rf myTarFile-->输出到tar

其他回答

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

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

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

git export ~/the/destination/dir

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

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

git导出的github存储库

在添加前缀(例如目录名)时将git导出到zip存档:

git archive master --prefix=directoryWithinZip/  --format=zip -o out.zip

gitarchive还可以与远程存储库一起使用。

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

要导出repo中的特定路径,请向git添加任意数量的路径作为最后一个参数,例如:

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv

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

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