假设我有一个实用程序some-check {baseline_folder} {working_folder}
,它对文件集(而不是单个文件)进行一些比较。
我想在两个略有不同的用例中使用此实用程序:
第一个用例非常简单,因为将基线(即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
。
另请注意,git write-tree
方法使用未合并索引引发错误,而git checkout-index
方法只是忽略目标工作树中的未合并文件。
有没有那么冗长的方法呢?
有更好的:
git worktree
这允许您将任何目录转换为git存储库的附件,使您可以同时检出两个不同的版本。您可以根据需要添加任意数量的附件,然后在不再需要时将其丢弃。例如,在同一个库的两个版本上工作非常有用(例如,它的最后一个稳定版本和开发版本的一个)。
这里有一个similar question。这应该符合您的需求。