意外使用‘-a’提交之前发出警告吗?

意外使用‘-a’提交之前发出警告吗?

我经常使用 提交git commit -a。不过,我有时使用 暂存单个文件,git add而不使用 提交-a。当我不小心时,我可能会不小心输入,-a而我之前已经为我的下一次提交准备了一个精心制作的暂存区域,如果我真的想将不同的更改保存在单独的提交中,我将不得不重新制作它。

有没有办法防止这种情况发生?理想情况下,如果(且仅当)某些更改已经暂存,git 应该询问(或断然拒绝)切换-a。我认为应该有一个配置,但我找不到它……

答案1

这里是 Unix 方法。

您不需要git支持即可获得简单警告。您可以编写包装器脚本或 shell 函数来检查命令行参数并采取相应的措施。

bash此功能应在(将其添加到您的.bashrc可能)或甚至在纯中起作用sh

git() {
   local found
   found=0
   for option; do
      if [ "$option" = "-a" ]; then found=1; break; fi
   done
   if [ "$found" -eq 1 ]
   then
      read -p "Option \`-a' detected. Please confirm with capital Y:" -r key
      [ "$key" != "Y" ] && return 254
   fi
   command git "$@"
}

或者使用脚本来代替函数:

#!/bin/sh

found=0
for option; do
   if [ "$option" = "-a" ]; then found=1; break; fi
done
if [ "$found" -eq 1 ]
then
   read -p "Option \`-a' detected. Please confirm with capital Y:" -r key
   [ "$key" != "Y" ] && return 254
fi
exec "/full/path/to/git" "$@"

将脚本命名为git,使其可执行,并将其放在您的目录中,该$PATH目录位于具有实际git.的目录之前,$HOME/bin可能是正确的位置;我的 Debian 甚至提供.profile(通过/etc/skel/.profile)来自动将此路径添加到(如果目录存在)。请记住,从现在开始,任何依赖于调用的PATH工具(例如脚本)都将调用您的包装器脚本。您可能不想要这样。如果是这样,请使用 shell 函数方法。$PATHgit

整个过程是一个概念验证,它可能不是最优的。它还不关心你的“如果(且仅当)一些更改已经上演”条件。我不熟悉git但我相信这个答案提供了一种检查方法:

git diff --cached

使用它来扩展函数或脚本的逻辑。请记住,您需要/full/path/to/git避免脚本调用自身并陷入循环(如没有分叉的分叉炸弹、连锁炸弹)。出于同样的原因,该函数应该使用/full/path/to/git或。command git

你也可以[ "$option" = "-a" ]用类似的东西来替换

[[ "$option" =~ ^-[a-zA-Z0-9]*a[a-zA-Z0-9]* ]]

覆盖a以紧凑形式给出的其他开关的情况(例如-Pa)。[[命令不可移植尽管。

相关内容