将 Git 索引复制到临时文件夹中

Dmi*_*nik 2 git git-checkout

假设我有一个实用程序some-check {baseline_folder} {working_folder},可以对文件集(而不是单个文件)进行一些比较。

我想在两个略有不同的用例中使用此实用程序:

  • 根据 HEAD 修订版验证工作树;
  • 索引与 HEAD 的预提交验证

第一个用例非常简单,因为将基线(即 HEAD)放入临时文件夹并不是什么大问题。

真正的问题是如何将索引放入某个文件夹中。我看到的唯一方法是:

  1. 创建一个藏匿处

  2. 立即应用回来

  3. 用于git-archive通过 stash ref 创建 zip

  4. 将其解压缩到临时文件夹

  5. 放下藏品

有没有更简洁的方法来做到这一点?

UPD:长话短说:问题是如何获取具有 HEAD+stage 的文件夹,但没有修改/未跟踪。

tor*_*rek 5

为了验证索引中的内容,您可以通过以下方式将索引中的所有内容提取到临时工作树中:

tmpdir=$(mktemp -d)                # or your other chosen method
trap "rm -rf $tmpdir" 0 1 2 3 15   # do something different in other languages

GIT_WORK_TREE=$tmpdir git checkout-index --all
Run Code Online (Sandbox Code Playgroud)

确保临时目录存在并且为空(mktemp -d此处执行此操作),并确保完成后进行清理(trap此处执行此操作)。

请注意,属性规则将应用于该git checkout-index步骤。使用和git archive,您可以获得更多控制权。如果要使用该方法,可以使用 将当前索引转换为树对象,然后在该树对象上使用。export-ignoreexport-substgit write-treegit archive

另请注意,该git write-tree方法会引发未合并索引的错误,而该git checkout-index方法只是从目标工作树中忽略未合并的文件。