.git-blame-ignore-revs ist eine Git-Funktion, die in Version 2.23 eingeführt wurde und es Ihnen ermöglicht, bestimmte Commits in Git-Blamme-Ergebnissen zu ignorieren. Dies ist besonders nützlich für Massen-Commits, die eine große Anzahl von Zeilen ändern, ohne die eigentliche Funktionalität des Codes zu verändern, wie z. B. Formatierungsänderungen, Umbenennungen oder die Anwendung von Codierungsstandards in einer Codebasis. Durch das Ignorieren dieser nichtfunktionalen Änderungen kann sich Git Blame auf sinnvolle Änderungen konzentrieren, die den Kontext und die Argumentation hinter dem Code erklären.
Wenn Sie Git Blame für eine Datei verwenden, wird Ihnen angezeigt, welcher Commit zuletzt jede Zeile der Datei geändert hat, zusammen mit dem Autor und dem Zeitstempel. Dies ist nützlich, um herauszufinden, warum eine bestimmte Zeile geändert wurde. Wenn jedoch ein großer Commit, der reine Formatierungsänderungen vornimmt, wie z. B. das Anwenden von „Prettier“, Teil des Verlaufs ist, kann Git Blame für viele Zeilen auf diesen Commit verweisen. Dies macht es schwierig, den tatsächlichen funktionalen Änderungsverlauf zu finden.
Wenn Ihr Team beispielsweise ein Tool wie Prettier oder ESLint verwendet, um die gesamte Codebasis neu zu formatieren, kann der resultierende Commit Tausende von Codezeilen betreffen. Ohne .git-blame-ignore-revs würde Git Blame diesen Commit als für jede betroffene Zeile verantwortlich anzeigen, was den aussagekräftigeren Verlauf hinter jeder Zeile verschleiern könnte.
Durch die Verwendung von .git-blame-ignore-revs können Sie Git Blame anweisen, diese Commits zu überspringen und sich auf die wichtigen Änderungen zu konzentrieren.
Um zu verstehen, wie diese Funktion verwendet wird, gehen wir ein Beispiel aus dem React-Repository durch.
Der React-Quellcode enthält Massen-Commits, bei denen Tools wie Prettier im gesamten Projekt ausgeführt wurden. Hier sind zwei solcher Commits:
2. Commit: fd2b3e1
Nachricht: Compiler: Entfork schönere Konfiguration
Dieses Commit enthält weitere Aktualisierungen der Prettier-Konfiguration, die sich auf alle .ts- und .tsx-Dateien im Repository auswirken.
Diese Commits befassen sich nur mit der Formatierung und liefern keinen sinnvollen Kontext, wenn untersucht wird, warum eine Codezeile so geschrieben wurde, wie sie war.
Damit Git Blame diese Massenformatierungs-Commits ignoriert, können wir eine .git-blame-ignore-revs-Datei im Stammverzeichnis des Repositorys erstellen.
touch .git-blame-ignore-revs
2. Fügen Sie der Datei die relevanten Commit-Hashes hinzu und erläutern Sie, warum jedes Commit ignoriert wird. In diesem Fall fügen wir die beiden zuvor identifizierten Commits hinzu:
# Prettier formatting changes c998bb1ed4b3285398c9c7797135d3f060243c6a fd2b3e13d330a4559f5aa21462e1cb2cbbcf144b
3. Speichern Sie die Datei .git-blame-ignore-revs im Repository. Diese Datei kann zusammen mit Ihrem Code versioniert werden, sodass das gesamte Team dieselbe Liste ignorierter Commits verwenden kann.
Um zu vermeiden, dass Sie die Option --ignore-revs-file jedes Mal eingeben müssen, wenn Sie Git Blame verwenden, können Sie Git so konfigurieren, dass es automatisch die Datei .git-blame-ignore-revs verwendet.
git config blame.ignoreRevsFile .git-blame-ignore-revs
Dadurch wird sichergestellt, dass jedes Mal, wenn jemand Git Blame in diesem Repository ausführt, Git die in .git-blame-ignore-revs aufgeführten Commits automatisch ignoriert.
Mal sehen, wie das in der Praxis funktioniert. Ohne die Massenformatierungs-Commits zu ignorieren, könnte Git Blame Folgendes anzeigen:
$ git blame src/someFile.tsx c998bb1e (Joe Bloggs 2023-03-15 10:00:00 0200 1) import React from 'react'; fd2b3e13 (Alan 2023-04-01 14:15:30 0200 2) function App() { c998bb1e (Joe Bloggs 2023-03-15 10:00:00 0200 3) returnHello, world!; fd2b3e13 (Ben 2023-04-01 14:15:30 0200 4) }
Diese Ausgabe zeigt an, dass die letzte Änderung an den Zeilen 1 und 3 auf den Prettier-Formatierungs-Commit (c998bb1e) zurückzuführen war und die Zeilen 2 und 4 in einem anderen Massen-Commit (fd2b3e13) geändert wurden. Da es sich um Formatierungsänderungen handelt, ist dies nicht hilfreich für das Verständnis, wer die eigentliche Logik hinter diesen Zeilen eingeführt hat.
Nach der Konfiguration von .git-blame-ignore-revs werden beim Ausführen von git Blame die Massen-Commits übersprungen und der tatsächliche Verlauf angezeigt:
$ git blame src/someFile.tsx a23d9b34 (May 2022-12-01 09:30:00 0200 1) import React from 'react'; b12e45a6 (JJ 2022-12-05 11:45:15 0200 2) function App() { a23d9b34 (Joe 2022-12-01 09:30:00 0200 3) returnHello, world!; b12e45a6 (Ram 2022-12-05 11:45:15 0200 4) }
Jetzt ordnet Git Blame die Zeilen den richtigen Commits zu und ignoriert dabei die unwichtigen Formatierungsänderungen. Dadurch erhalten wir nützliche Informationen, die zeigen, wer die tatsächlichen Funktionsänderungen vorgenommen hat.
Die Funktion .git-blame-ignore-revs in Git 2.23 ist ein Game-Changer für Projekte mit Massenformatierung oder Stiländerungen. Durch das Einrichten einer .git-blame-ignore-revs-Datei und die Konfiguration Ihres Repositorys können Sie Codierungsstandards anwenden, Tools wie Prettier ausführen oder Code umgestalten, ohne sich Gedanken über die Verschmutzung des Blame-Verlaufs machen zu müssen.
Mit diesem Ansatz kann Ihr Team die Qualität und Formatierung des Codes sicher verbessern, ohne dabei auf die Fähigkeit verzichten zu müssen, sinnvolle Änderungen zu verfolgen. So stellen Sie sicher, dass Git Blame ein wertvolles Werkzeug bleibt, um den Verlauf und die Argumentation hinter jeder Codezeile zu verstehen.
Bei Think Throo haben wir es uns zur Aufgabe gemacht, die fortgeschrittenen Codebasis-Architekturkonzepte zu vermitteln, die in Open-Source-Projekten verwendet werden.
Verzehnfachen Sie Ihre Programmierkenntnisse, indem Sie fortgeschrittene Architekturkonzepte in Next.js/React üben, lernen Sie die Best Practices kennen und erstellen Sie Projekte in Produktionsqualität.
Wir sind Open Source – https://github.com/thinkthroo/thinkthroo (Geben Sie uns einen Stern!)
Verbessern Sie die Fähigkeiten Ihres Teams mit unseren Fortgeschrittenenkursen basierend auf der Codebasis-Architektur. Kontaktieren Sie uns unter [email protected], um mehr zu erfahren!
https://github.com/facebook/react/blob/main/.git-blame-ignore-revs
https://gist.github.com/kateinoigakukun/b0bc920e587851bfffa98b9e279175f2
https://github.com/facebook/react/commit/c998bb1ed4b3285398c9c7797135d3f060243c6a
https://moxio.com/blog/ignoring-bulk-change-commits-with-git-blame/
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3