git - "git export" ( 如"svn export" )?

  显示原文与译文双语对照的内容

我一直想知道是否有一个好的"git导出"解决方案来创建一个没有 .git 知识库目录的树副本。 至少有三种方法我知道:

  1. git clone 之后删除 .git 存储库目录。
  2. git checkout-index web 提到这个功能,但从"只需将所需的树读入索引。。"开始,我不完全确定如何做。
  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

压缩文件:


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

git help archive 有关详细信息,它非常灵活。

我发现了什么选项 2. 从知识库中,你可以执行以下操作:


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

路径末尾的斜杠很重要,否则会导致文件在/destination 中,前缀为'径'。

由于在正常情况下,索引包含了存储库的内容,所以对"将所需的树读入索引"没有什么特别的。 已经存在了。

需要 -a 标志来签出索引( 我不确定在这种情况下忽略这里标志意味着什么,因为它不做我想要的) 中的所有文件。 -f 标志强制覆盖输出中的任何现有文件,这里命令通常不执行这里操作。

这好像是我在寻找的"git导出"。

git archive 也适用于远程存储库。


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

要导出仓库中的特定路径,请添加尽可能多的路径作为git的最后一个参数,e.g.:


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

我在 git-checkout-index 编写了一个简单的包装器,你可以这样使用:


git export ~/the/destination/dir

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

安装很简单;只需将脚本放到你的PATH 中,并确保它是可以执行的。

用于 git-export的github知识库

Git手册中:

使用 git-checkout-index"导出整个树""

前缀能力基本上使得使用git-checkout-index作为"导出为树"函数变得微不足道。 只需将所需的树读入索引,然后执行以下操作:

$ git checkout-index --prefix=git-export-dir/-a

等价于


svn export. otherpath

在一个现有的仓库中


git archive branchname | (cd otherpath; tar x)

等价于


svn export url otherpath


git archive --remote=url branchname | (cd otherpath; tar x)

在寻找导出git知识库的方法时,我经常碰到这个页面。 我对这个问题的回答考虑了三种属性,svn导出通过设计与git进行了比较,因为svn遵循一个集中的存储库方法:

  • 它通过不导出所有的修改来最小化远程存储库位置的流量
  • 导出目录中不包含元信息
  • 通过指定适当的路径来导出使用svn的特定分支

    
    git clone --depth 1 --branch master git://git.somewhere destination_path
    rm -rf destination_path/.git
    
    

当构建一个特定的发行版时,克隆一个稳定的分支是很有用的例如 --branch stable 或者 --branch release/0.9

...