将 Git 索引复制到临时文件夹中
Copy Git index into a temp folder
假设我有一个实用程序 some-check {baseline_folder} {working_folder}
可以对文件集(而不是单个文件)进行一些比较。
我想在两个略有不同的用例中使用此实用程序:
- 根据 HEAD 修订验证工作树;
- 索引与 HEAD 的预提交验证
第一个用例非常简单,因为将基线(即 HEAD)放入临时文件夹并不是什么大问题。
真正的问题是如何获取某个文件夹的索引。我看到的唯一方法是:
创建一个存储空间
立即申请回来
使用 git-archive
通过存储引用创建一个 zip
解压到临时文件夹
放下藏品
有没有更简洁的方法?
UPD:长话短说:问题是如何获取具有 HEAD+stage 但没有 modified/untracked.
的文件夹
Is there any less verbose way to do it?
有更好的:
git worktree
这允许您将任何目录变成 git 存储库的附件,使您能够同时签出两个不同的修订版。您可以根据需要添加任意数量的附件,然后在不再需要时丢弃它们。这非常有用,例如,处理同一个库的两个版本(例如,它的最后一个稳定版本和开发版本的提示)。
这里有一个。这应该符合您的需求。
为了验证索引中的内容,您可以通过这种方式将其中的所有内容提取到临时工作树中:
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
方法只会从目标工作树中忽略未合并的文件。
假设我有一个实用程序 some-check {baseline_folder} {working_folder}
可以对文件集(而不是单个文件)进行一些比较。
我想在两个略有不同的用例中使用此实用程序:
- 根据 HEAD 修订验证工作树;
- 索引与 HEAD 的预提交验证
第一个用例非常简单,因为将基线(即 HEAD)放入临时文件夹并不是什么大问题。
真正的问题是如何获取某个文件夹的索引。我看到的唯一方法是:
创建一个存储空间
立即申请回来
使用
git-archive
通过存储引用创建一个 zip解压到临时文件夹
放下藏品
有没有更简洁的方法?
UPD:长话短说:问题是如何获取具有 HEAD+stage 但没有 modified/untracked.
的文件夹Is there any less verbose way to do it?
有更好的:
git worktree
这允许您将任何目录变成 git 存储库的附件,使您能够同时签出两个不同的修订版。您可以根据需要添加任意数量的附件,然后在不再需要时丢弃它们。这非常有用,例如,处理同一个库的两个版本(例如,它的最后一个稳定版本和开发版本的提示)。
这里有一个
为了验证索引中的内容,您可以通过这种方式将其中的所有内容提取到临时工作树中:
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
方法只会从目标工作树中忽略未合并的文件。