Ich versuche, git pre-commit Hook-Skript zu schreiben, es sollte das Datum des Commits am Anfang der geänderten Dateien schreiben. Mein Problem ist, dass ich keine modifizierten Dateien zu früheren Commits hinzufügen kann. Wenn ich versuche, git commit erneut aufzurufen, wird rekursiv ausgeführt. Wie kann ich Skript schreiben, welches Zeitpunkt der Änderung am Ende der geänderten Dateien anfügt?
Mein Code:
%Vor% Sie können ein Commit in einem pre Commit-Hook nicht ändern.
Und was Sie tun, ist ähnlich dem Schlüsselwort-Erweiterungsmechanismus, der keine Best Practice mit Git (oder irgendeinem DVCS) ist, wie in " Um das Präfix ?<revision-number>
zu Codes von Git / Svn ".
Andere Ansätze umfassen:
Kann git-Attribut mit smudge/clean Operation ist was du suchst:
Related: git wmidge / clean verwenden, um den Inhalt der Datei zu ersetzen
Wenn Sie Ihren Pre-Commit-Haken anschauten, hatten Sie fast etwas, das irgendwie funktionierte. Hier sind die minimalen Änderungen, die ich sehe:
%Vor% Ich habe jedoch einige Probleme mit Ihrer Implementierung festgestellt. Sie entfernen eine Zeile, die "/ %% *" entspricht, vom oberen Rand der Datei und fügen eine neue an den unteren Rand der Datei an. Jedes Mal, wenn Sie das ausführen, hängen Sie immer eine neue /%% mm_dd_YYYY %%\
-Zeile an das Ende der Datei an. Das ist möglicherweise nicht das, was Sie wollen (1000 Commits später, eine zuvor leere Datei wird 1000 Zeilen haben). Ich denke, was Sie tun wollten, war die bestehende Linie zu ersetzen. In diesem Fall würde eine sed-Übersetzung funktionieren, um die übereinstimmenden Zeilen zu ersetzen.
Hier ist ein Rezept, von dem ich denke, dass es dem kommt, was Sie wollten:
%Vor% Wenn die erste Zeile der Datei mit /%% ... %%\
übereinstimmt, wird sie mit dem aktuellen Datum / der aktuellen Uhrzeit aktualisiert (zum Zeitpunkt des Vorbereitungs-Hooks).
Aber das war nur um zu zeigen, wie es einfach gemacht werden könnte. Das ist eigentlich keine vollständige Lösung. Das obige Skript funktioniert nicht mit Dateien, die Leerzeichen in ihrem Namen, doppelte Anführungszeichen, umgekehrte Schrägstriche, Tabulatoren usw. enthalten.
Für eine vollständige Lösung:
Verwenden Sie den folgenden Vorab-Hook:
%Vor%Erstellen Sie ".filters / myfilter" mit folgendem Inhalt:
%Vor%Die obige Implementierung kann jeden Dateinamen handhaben, den Sie darauf werfen.
Tags und Links git bash hook commit pre-commit-hook