Puede usar su lenguaje de scripting favorito para crear el comando git2
, que comprobará si lo está ejecutando con los argumentos commit -a
. Si ese es el caso, ejecute /usr/bin/git status --porcelain
y compruebe si hay algunos cambios en el índice (la salida con formato de porcelana es más fácil de analizar, mi primera conjetura sería ejecutarla a través de grep '^[AMD]'
y verificar si encontró algo. Ahora, puede imprimir una advertencia y salir, o ejecutar /usr/bin/git
que todos los argumentos originales para continuar como si no hubiera git2 (que también es lo que debes hacer si no has sido ejecutado con commit -a).
Aquí hay un ejemplo en Perl (git, que requiere de todos modos):
#!/usr/bin/env perl
use strict;
use warnings;
my %aliases = map { split(/\n/, $_, 2) }
split /\0/,
`git config -z --get-regexp alias\\.`;
my %commit_aliases = ((commit => 1),
map { s/alias\.//; $_ => 1 }
grep $aliases{$_} =~ /^commit\b/,
keys %aliases);
my ($command, @args) = @ARGV;
if ($commit_aliases{$command} && $args[0] =~ /^-a|^--all/) {
my @staged = grep /^M/, split /\0/, `git status -z`;
if (@staged) {
print "There are staged changes, are you sure you want to commit all? (y/N) ";
chomp(my $answer = <STDIN>);
if ($answer =~ /^y/i) {
run_command()
}
} else {
run_command()
}
} else {
run_command()
}
sub run_command {
system 'git', $command, @args;
exit $? >> 8;
}
a continuación, cree un alias de fiesta alias git2 git
y ya está todo listo
.
Simplemente curioso: ¿Por qué usa '-a' cuando no quiere usarlo? Recomiendo superar con 'commit -a' por completo y usar' git add. && git commit' en su lugar. Esos son dos comandos, lo sé, pero de esta manera es casi imposible agregar cada cambio por error – KingCrunch