gpt4 book ai didi

git - 测试将要在预提交 Hook 中提交的内容

转载 作者:IT王子 更新时间:2023-10-29 00:43:49 25 4
gpt4 key购买 nike

pre-commit Hook 运行时,存储库可能不干净。因此,如果您天真地运行测试,它们将不会与您提交的内容相悖,而是与您的工作树中发生的任何事情相悖。

显而易见的事情是 git stash --keep-index --include-untrackedpre-commitgit pop 的开头 最后。这样您就可以针对(纯)索引进行测试,这正是我们想要的。

不幸的是,如果您使用 git add --patch(特别是如果您编辑 hunks),这会生成 merge 冲突标记,因为 stash@{0} 的内容可能提交后与工作树不匹配。

另一个常见的解决方案是克隆存储库并在一个新的临时存储库中运行测试。这有两个问题:

  1. 我们还没有提交,所以我们不能轻易地获得我们即将提交状态的存储库的副本;和
  2. 我的测试可能对当前工作目录的位置敏感,例如由于本地环境配置。

如何在不引入 merge 冲突标记且不修改帖子的情况下,将我的工作树恢复到 git stash --keep-index --include-untracked 之前的任何状态-提交 HEAD?

最佳答案

git write-treepre-commit Hook 中很有用。它将一棵树写入索引的 repo(如果提交完成,这棵树将被重用。)

将树写入存储库后,您可以使用 git archive | tar -x 将树写入临时目录。

例如:

#!/bin/bash

TMPDIR=$(mktemp -d)
TREE=$(git write-tree)
git archive $TREE | tar -x -C $TMPDIR

# Run tests in $TMPDIR

RESULT=$?
rm -rf "$TMPDIR"
exit $RESULT

关于git - 测试将要在预提交 Hook 中提交的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com