我目前正在使用以下命令导出 git 存储库:
git checkout-index -f --prefix=$TARGET_PATH/ $GIT_REPO_PATH/*
实际行为:导出发生在添加到索引的所有文件上。
期望的行为:导出所有不仅添加了,而且也提交了的文件。
我尝试使用--stage
-option,但已提交和未提交文件的阶段为 0(我不得不说,我还不了解阶段编号。
任何的想法?
我目前正在使用以下命令导出 git 存储库:
git checkout-index -f --prefix=$TARGET_PATH/ $GIT_REPO_PATH/*
实际行为:导出发生在添加到索引的所有文件上。
期望的行为:导出所有不仅添加了,而且也提交了的文件。
我尝试使用--stage
-option,但已提交和未提交文件的阶段为 0(我不得不说,我还不了解阶段编号。
任何的想法?
您不能在一个命令中执行此操作,您必须先将提交树中的文件加载到索引中。幸运的是,您不必使用您使用的普通索引:
$ export GIT_INDEX_FILE=.git/tmp-index
$ git read-tree HEAD && git checkout-index --prefix=/path/dir/ -f -a
$ rm "$GIT_INDEX_FILE"
解决这个问题的一个简单、天真的解决方案是使用git archive
. 它将从 git 历史中提取一棵树并将其写入标准输出。管道通过 tar 允许您将文件写入磁盘上的特定目录。
# HEAD to use latest committed version
git archive HEAD | tar x -C"/path/to/dir"
我认为git --work-tree=<path/to/wherever> checkout <HEAD/branch/hash> -- .
做你想要的。它将在(由 指定的路径)中创建(存在于指定提交中的每个文件)的副本--work-tree
。