gpt4 book ai didi

git - 防止推送到某些文件中包含选项卡的 git(例如 *.cpp、*.h、CMakeLists.txt)

转载 作者:IT王子 更新时间:2023-10-29 01:27:38 26 4
gpt4 key购买 nike

我希望我的远程存储库拒绝任何包含包含选项卡的文件的推送,但前提是该文件属于某个类(基于文件名)。这可能吗?
我仔细查看了 githooks 中的 update hook,我认为这是正确的。

简而言之,在以下情况下应该拒绝推送:

  1. 存在所列类型的文件(*.cpp*.hCMakeLists.txt)
  2. 包含一个或多个制表符。

最佳答案

呃哦,这个问题好像漏掉了。希望你还在外面,Esben!

您正在寻找 update hook ,它为每个更新的 ref 运行一次。参数是 ref 的名称、旧对象名称(提交 SHA1)和新对象名称。

因此,您真正需要做的就是检查新旧版本之间的差异,并确保它符合您的标准。当然,这并不完全简单,但它是完全可控的。这是我要做的:

将以下脚本保存到.git/hooks/update

old=$2
new=$3

# that's a literal tab, because (ba)sh turns \t into t, not a tab
# make sure your editor doesn't expand it to spaces
git diff --name-only $old $new | egrep '(\.(cpp|h)$)|^CMakeLists.txt$' | xargs -d'\n' git diff -U0 $old $new -- | grep -q '^+.* ' && exit 1

它列出了所有新旧文件之间的差异,对所有需要的文件进行 grep,获取它们的差异(上下​​文行为零,因为我们不关心),对添加的行进行 grep (以包含制表符的 +) 开头。如果 grep 找到一个成功退出,这将使 && 运行 exit 1,导致 hook 退出失败并中止更新!

请注意,这与您的要求略有不同 - 它会检查差异是否添加任何制表符。从长远来看,这可能更好;一旦您确定您现有的代码没问题,它就是一回事,只是速度要快得多,因为它不必搜索所有内容。

关于git - 防止推送到某些文件中包含选项卡的 git(例如 *.cpp、*.h、CMakeLists.txt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985463/

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