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 .