假设我有一个实用程序some-check {baseline_folder} {working_folder}
,它对文件集(而不是单个文件)进行一些比较。
我想在两个略有不同的用例中使用此实用程序:
- 根据 HEAD 修订版验证工作树;
- 索引与 HEAD 的预提交验证
第一个用例非常简单,因为将基线(即 HEAD)放入临时文件夹并不是什么大问题。
真正的问题是如何将索引放入某个文件夹中。我看到的唯一方法是:
创建一个存储库
立即应用回来
使用
git-archive
通过存储引用创建 zip将其解压缩到临时文件夹
放下储藏室
有没有更简洁的方法来做到这一点?
UPD:长话短说:问题是如何获取具有 HEAD+stage 的文件夹,但没有修改/未跟踪。
最佳答案
为了验证索引中的内容,您可以通过以下方式将索引中的所有内容提取到临时工作树中:
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
确保临时目录存在且为空(此处的 mktemp -d
执行此操作),并确保完成后进行清理(此处的 trap
执行此操作)那个)。
请注意,属性规则将应用于 git checkout-index
步骤。使用 git archive
,您可以通过 export-ignore
和 export-subst
获得更多控制。如果您想使用该方法,可以使用 git write-tree 将当前索引转换为树对象,然后对该树对象使用 git archive 。 p>
另请注意,git write-tree
方法会引发未 merge 索引的错误,而 git checkout-index
方法只是从目标工作中忽略未 merge 的文件-树。
关于git - 将 Git 索引复制到临时文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213050/