git - 做一个 "git export"(比如 "svn export")?

标签 git export git-archive svn-export

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

  1. git clone 然后删除 .git 存储库目录。
  2. git checkout-index暗指此功能,但以“只需将所需的树读入索引...”开头,我不太确定该怎么做。
  3. git-export是一个第三方脚本,本质上是将 git clone 操作到一个临时位置,然后将 rsync --exclude='.git' 操作到最终目的地。

这些解决方案都没有真正让我满意。最接近 svn export 的可能是选项 1,因为两者都要求目标目录首先为空。但选项 2 似乎更好,假设我能弄清楚将树读入索引意味着什么。

最佳答案

可能实现此目的的最简单方法是使用 git archive .如果您真的只需要展开的树,您可以这样做。

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 help archive有关更多详细信息,它非常灵活。


请注意,即使归档文件不包含 .git 目录,它也会包含其他 stash 的 git 特定文件,如 .gitignore、.gitattributes 等。如果您不希望它们出现在归档文件中,确保在 .gitattributes 文件中使用 export-ignore 属性并在归档之前提交它。 Read more...


注意:如果有兴趣导出索引,命令为

git checkout-index -a -f --prefix=/destination/path/

(有关详细信息,请参阅 Greg's answer)

关于git - 做一个 "git export"(比如 "svn export")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160608/

相关文章:

git-archive 一个子目录 --

deployment - PhpStorm:如何将部署设置从一个项目导出到另一个项目?

git status 显示 ""之间的文件

git - 如何摆脱 GIT 中的 "REVERTING"

git - Julia git 错误

drupal - 如何创建在 Drupal 7 网站之间传输节点的提要?

Delphi GLScene 将场景导出为 STL

git - 如何附加分支名称并提交到 git 存档输出文件?

git - 可以将 GitHub Secrets 与公共(public)存储库一起使用吗?