Unix abordagem aqui.
Você não precisa do git support para receber um aviso simples. Você pode escrever um script wrapper ou uma função shell que examinará os parâmetros da linha de comando e tomará as medidas necessárias.
Esta função deve funcionar em bash (adicione ao seu .bashrc talvez) ou mesmo em 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 "$@"
}
Como alternativa, um script em vez de uma função:
#!/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" "$@"
Nomeie o script git , torne-o executável e coloque-o em um diretório que esteja no seu $PATH antes do diretório com o% realgit. $HOME/bin pode ser o lugar certo; meu Debian ainda fornece .profile (via /etc/skel/.profile ) que adiciona este caminho para PATH automaticamente (se o diretório existir). Lembre-se de que qualquer ferramenta (por exemplo, um script) que dependa de $PATH para chamar git chamará seu script de wrapper a partir de agora. Você pode não querer isso. Em caso afirmativo, use a abordagem da função shell.
Todo o procedimento é uma prova de conceito, pode ser sub-ótimo. Ele ainda não se importa com a sua condição "se (e somente se) algumas alterações já tiverem sido". Não estou familiarizado com git , mas acredito que esta resposta forneça uma maneira de verificar isso:
git diff --cached
Use-o para expandir a lógica da sua função ou script. Lembre-se de que você precisa de /full/path/to/git para evitar que seu script se chame e fique preso em um loop (como uma bifurcação sem forking, uma chain bomb). A função deve usar /full/path/to/git ou command git pela mesma razão.
Você também pode querer substituir [ "$option" = "-a" ] por algo como
[[ "$option" =~ ^-[a-zA-Z0-9]*a[a-zA-Z0-9]* ]]
para cobrir casos em que a é fornecido com outros comutadores de uma forma compacta (por exemplo, -Pa ). O comando [[ não é portátil .