git checkout-index仅适用于已提交的文件

时间:2012-07-24 07:22:17

标签: git

我目前正在使用以下方式导出git存储库:

git checkout-index -f --prefix=$TARGET_PATH/ $GIT_REPO_PATH/*

实际行为:导出发生在添加到索引的所有文件中。

所需行为:导出不仅已添加但已提交的所有文件。

我尝试使用--stage - 选项,但是对于已提交和未提交的文件,该阶段为0(我不得不说,我还不了解阶段编号。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您无法在一个命令中执行此操作,您必须先将提交树中的文件加载到索引中。幸运的是,您不必使用您使用的普通索引:

$ export GIT_INDEX_FILE=.git/tmp-index
$ git read-tree HEAD && git checkout-index --prefix=/path/dir/ -f -a
$ rm "$GIT_INDEX_FILE"

答案 1 :(得分:1)

这个问题的简单,天真的解决方案是使用git archive。 它将从git历史中提取树并将其写入标准输出。 管道槽tar允许您将文件写入磁盘上的特定目录。

# HEAD to use latest committed version
git archive HEAD | tar x -C"/path/to/dir"

答案 2 :(得分:1)

我认为git --work-tree=<path/to/wherever> checkout <HEAD/branch/hash> -- .可以满足您的需求。它将在(由--work-tree指定的路径中)创建(指定提交中存在的每个文件)的副本。