做一个“git export”(如“svn export”)?
我一直在想,是否有一个很好的“git export”解决方案可以创建没有.git
存储库目录的树的副本。 至少有三种方法我知道:
git clone
然后删除.git
存储库目录。 git checkout-index
暗示了这个功能,但是以“只需将所需的树读入索引...”开始,我不完全知道该怎么做。 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 checkout-index -a -f --prefix=/destination/path/
(有关更多详细信息,请参阅Greg的答案)
我发现了选项2的含义。 从存储库中,您可以执行以下操作:
git checkout-index -a -f --prefix=/destination/path/
路径末尾的斜杠很重要,否则会导致文件位于/目的地前缀为“路径”。
由于在正常情况下,索引包含存储库的内容,因此“将所需树读入索引”没有什么特别之处。 它已经在那里。
-a
标志是检查索引中的所有文件所必需的(我不确定在这种情况下忽略这个标志是什么意思,因为它没有做我想做的)。 -f
标志强制覆盖输出中的任何现有文件,该命令通常不会这样做。
这似乎是我寻找的那种“git export”。
git archive
也可以与远程仓库一起使用。
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
链接地址: http://www.djcxy.com/p/677.html
上一篇: Do a "git export" (like "svn export")?
下一篇: Reset local repository branch to be just like remote repository HEAD