Warne beim Ausführen von git commit -a, wenn etwas inszeniert ist

8

Manchmal führe ich git commit -a aus dem Muskelgedächtnis aus, wenn ich einige Dateien oder Teile von Dateien sorgfältig inszeniert und bereit zum Commit habe, was dazu führt, dass ich meine sorgfältige Staging-Aktion verliere.

Gibt es eine Möglichkeit, git commit -a warn zu machen, wenn gerade etwas (Datei oder Patch) läuft?

(Natürlich sollte ich einfach -a less verwenden, um mein Problem zu lösen, aber meine Frage steht.)

    
Sophie Alpert 09.07.2011, 00:39
quelle

4 Antworten

2

Leider lässt Git es nicht zu, dass Aliase vorhandene Befehle überschreiben, anderenfalls könnten Sie diese Funktionalität einfach über einen Alias ​​hinzufügen.

Aber Sie können dort einen Weg finden. Es würde erfordern, dass du dich umschreibst, um etwas statt git commit - vielleicht git c zu tippen.

So können Sie es machen:

  1. Fügen Sie den folgenden Shell-Code irgendwo in eine Skriptdatei ein (z. B. /path/to/commit-wrapper )

    %Vor%
  2. Machen Sie die Datei ausführbar: chmod a+x /path/to/commit-wrapper
  3. Richten Sie Ihren Alias ​​ein: git config --global alias.c '!/path/to/commit-wrapper'
  4. Verwenden Sie git c anstelle von git commit .

Wenn Git geändert wird, um Aliase für vorhandene Befehle zuzulassen, ändern Sie die letzte Zeile in "$(git --exec-path)"/git-commit "$@" , um eine Endlosschleife zu vermeiden.

    
Richard Hansen 10.07.2011 06:30
quelle
1

Fügen Sie in Ihrem Repo einen pre-commit hooke hinzu, etwa wie folgt:

%Vor%

Das sollte dir helfen, dein "Muskelgedächtnis" zu überwinden.

Leider kann der Pre-Commit-Hook nicht stark genug sein, um mehr Checks auszuführen (als ob Sie das Argument -a zum Commit angegeben hätten.) Wenn Sie -a ausführen, wird der Pre-Commit-Hook als angezeigt Obwohl alle Dateien inszeniert wurden, werden sie nach der Ausführung als nicht gesetzt angezeigt. Sie können also nicht zwischen dem, was Sie zuvor inszeniert haben, und den Dateien unterscheiden, die aufgrund von -a bereitgestellt wurden.

    
manojlds 09.07.2011 20:02
quelle
1

Sie können Ihre bevorzugte Skriptsprache verwenden, um den Befehl git2 zu erstellen, der prüft, ob Sie ihn mit den Argumenten commit -a ausführen. Wenn das der Fall ist, führe /usr/bin/git status --porcelain aus und überprüfe, ob es einige Änderungen am Index gibt (Porzellan-formatierte Ausgabe ist einfacher zu parsen, meine erste Schätzung wäre es, grep '^[AMD]' zu durchlaufen und zu prüfen, ob etwas gefunden wurde. Jetzt Sie können entweder eine Warnung ausgeben und beenden oder /usr/bin/git ausführen, wobei alle ursprünglichen Argumente fortfahren, als gäbe es kein git2 (was Sie auch tun, wenn Sie nicht mit commit -a ausgeführt wurden).

Hier ist ein Beispiel in Perl (welches git sowieso benötigt):

%Vor%

Dann erstellen Sie einen Bash-Alias alias git2 git und Sie sind fertig.

    
che 09.07.2011 22:10
quelle
0

Ich kenne keinen automatischen Weg, aber manuell ist es genau so wie in dieser Frage: Wie zeige ich die Änderungen an, die durchgeführt wurden?

Was im Wesentlichen ist: git diff --cached

    
JohnKlehm 09.07.2011 00:46
quelle

Tags und Links