Вы можете использовать ваш любимый язык сценариев для создания команды git2
, которая проверит, запускаете ли вы ее с аргументами commit -a
. Если это так, запустите /usr/bin/git status --porcelain
и проверьте, есть ли какие-либо изменения в индексе (вывод в формате фарфора легче проанализировать, я бы предпочел прогнать его через grep '^[AMD]'
и проверить, нашел ли он что-то. Теперь , вы можете либо напечатать предупреждение и выйти, либо запустить /usr/bin/git
, для которого все исходные аргументы продолжались, как если бы не было git2 (это также то, что вы делаете, если вы не запускались с коммитом -a).
Вот пример на Perl (который все равно требуется git):
#!/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;
}
Затем создайте псевдоним bash alias git2 git
, и все готово.