Information!
Folgender Text ist übersetzt und zitiert aus folgendem Beiträgen:➜ http://karma-runner.github.io/1.0/dev/git-commit-msg.html
➜ https://dev.to/jasonh33/git-commit-patterns-5dm7
➜ https://www.conventionalcommits.org/en/v1.0.0/
Die Verwendung von Git ist für uns Entwickler etwas Wesentliches, ob in persönlichen Projekten, Open Source, mit vielen Leuten oder einer ganzen Gemeinschaft.
Daher ist es wichtig, dass wir Git Commit richtig einsetzen. Eine kohärente und standardisierte Sprache hilft allen am Projekt Beteiligten, die vorgenommenen Änderungen zu verstehen.
● CREATED MAIN LOOP & TIMING CONTROL 2 HOURS AGO
● ENABLED CONIFG FILE PARSING 2 HOURS AGO
● MISC BUGFIXES 3 HOURS AGO
●╮ CODE ADDITIONS/EDITS 4 HOURS AGO
│● MORE CODE 4 HOURS AGO
│● HERE HAVE CODE 4 HOURS AGO
●╯ AAAAAAAAAAA 4 HOURS AGO
● ASHJDGAJHDG 9 HOURS AGO
● MY HANDS ARE TYPING WORDS 14 HOURS AGO
● HAAAAAAAAAAAAANDS 20 HOURS AGO
In der obigen Abbildung sehen wir, wie schädlich ein schlecht kommentierter Commit sein kann, da wir die Art der aufgetretenen Änderung und deren Kontext nicht verstehen. Langfristig ist der Effekt sogar noch schädlicher, da die Wartbarkeit der Software aufgrund von Inkonsistenzen im Umfang dieser Änderungen und deren Auswirkungen auf das Projekt in der Vergangenheit leidet.
In diesem Sinne lassen Sie uns ein wenig über das Conventional Commits Pattern sprechen.
Conventional Commits ist eine einfache Konvention für Commit-Nachrichten, die einer Reihe von Regeln folgt und Projekten hilft, eine eindeutige und gut strukturierte Commit-Historie zu haben.
Die Regeln sind sehr einfach, wie unten gezeigt, haben wir einen Typ von Commit, den Kontext (scope) von Commit und die Nachricht (subject) von Commit.
!type(?scope): !subject
<?body>
<?footer>
!
steht also für die obligatorischen Attribute und ?
für die optionalen Attribute.
Auf diese Weise teilen wir unserem Team mit, was der Commit tun wird, wenn er angewendet wird.
“If applied, this commit will ”
“If applied, this commit will change the markup”, was viel mehr Sinn ergibt als: “If applied, this commit will changed the markup”.
git commit -m "refactor: changed the markup"
git commit -m "refactor: change the markup"
Der type ist dafür verantwortlich, uns mitzuteilen, welche Änderung oder Iteration vorgenommen wird. Aus den Konventionsregeln ergeben sich die folgenden Typen:
type | Erklärung | Beispiele |
---|---|---|
test | 🇩🇪 bezeichnet jede Art der Erstellung oder Änderung von Testcodes 🇬🇧 indicates any type of creation or alteration of test codes | Creation of unit tests. |
feat | 🇩🇪 zeigt die Entwicklung einer neuen Funktion für das Projekt an. 🇬🇧 indicates the development of a new feature for the project. | Adding a service, functionality, endpoint, etc. |
refactor | 🇩🇪 wird verwendet, wenn ein Code-Refactoring vorgenommen wird, das keine Auswirkungen auf die Systemlogik/Regeln hat. 🇬🇧 used when there is a code refactoring that does not have any impact on the system logic/rules. | Code changes after a code review |
style | 🇩🇪 wird verwendet, wenn ein Code-Refactoring vorgenommen wird, das keine Auswirkungen auf die Systemlogik/Regeln hat. 🇬🇧 used when there are code formatting and style changes that do not change the system in any way. | Change the style-guide, change the lint convention, fix indentations, remove white spaces, remove comments, etc… |
fix | 🇩🇪 bei der Korrektur von Fehlern, die zu Fehlern im System führen. 🇬🇧 used when correcting errors that are generating bugs in the system. | Apply a handling for a function that is not behaving as expected and returning an error. |
chore | 🇩🇪 kennzeichnet Änderungen am Projekt, die sich nicht auf die System- oder Testdateien auswirken. Dies sind Entwicklungsänderungen. 🇬🇧 indicates changes to the project that do not affect the system or test files. These are developmental changes. | Change rules for eslint, add prettier, add more file extensions to .gitignore |
docs | 🇩🇪 wird verwendet, wenn es Änderungen in der Projektdokumentation gibt. 🇬🇧 used when there are changes in the project documentation. | add information in the API documentation, change the README, etc. |
build | 🇩🇪 wird verwendet, um Änderungen anzuzeigen, die sich auf den Build-Prozess des Projekts oder externe Abhängigkeiten auswirken. 🇬🇧 used to indicate changes that affect the project build process or external dependencies. | Gulp, add/remove npm dependencies, etc… |
perf | 🇩🇪 zeigt eine Änderung an, die die Systemleistung verbessert hat. 🇬🇧 indicates a change that improved system performance. | change ForEach to While, etc… |
ci | 🇩🇪 für Änderungen in CI-Konfigurationsdateien verwendet. 🇬🇧 used for changes in CI configuration files. | Circle, Travis, BrowserStack, etc… |
revert | 🇩🇪 zeigt die Rückgängigmachung einer vorherigen Übertragung an. 🇬🇧 indicates the reversal of a previous commit. |
|
build
und chore
kann recht subtil sein und zu Verwirrung führen, daher müssen wir uns über den richtigen type im Klaren sein. Im Fall von Node.js können wir zum Beispiel denken, dass wir einen chore
verwenden, wenn es eine Ergänzung/Änderung an einer bestimmten Entwicklungsabhängigkeit gibt, die in devDependencies
vorhanden ist. Für Änderungen/Ergänzungen von allgemeinen Abhängigkeiten zum Projekt, die einen direkten und realen Einfluss auf das System haben, verwenden wir build
.An diesem Punkt haben wir es geschafft, die Art der Änderung, die in dem Commit vorgenommen wurde, zu verstehen (commit type) und klar zu verstehen, was der Commit bringen wird, wenn er angewendet wird (commit subject).
Auch wenn der Geltungsbereich nicht obligatorisch ist, kann er dazu verwendet werden, den Commit in einen Kontext zu setzen und dem Thema weniger Verantwortung zu übertragen, um ihn so kurz und prägnant wie möglich zu gestalten. Beachten Sie, dass der Geltungsbereich in den Commit zwischen Klammern eingefügt werden muss.
git commit -m "feat(UserService): add /getAppointments endpoint"
Scopes müssen mit /
getrennt werden.
Für weitere Informationen über den Nachrichtentext siehe:
Referenzierung von Themen
Abgeschlossene Themen sollten in einer separaten Zeile in der Fußzeile mit dem Präfix „Closes“ aufgelistet werden, etwa so:
Closes #234
oder im Falle von mehreren Themen:
Closes #123, #245, #992
Breaking changes
Alle bahnbrechende Änderungen müssen in der Fußzeile mit der Beschreibung der Änderung, der Begründung und den Migrationshinweisen erwähnt werden.
BREAKING CHANGE:
`port-runner` command line option has changed to `runner-port`, so that it is
consistent with the configuration file syntax.
To migrate your project, change all the commands, where you use `--port-runner`
to `--runner-port`.
Beispiel für eine Commit-Meldung:
fix(middleware): ensure Range headers adhere more closely to RFC 2616
Add one new dependency, use `range-parser` (Express dependency) to compute
range. It is more well-tested in the wild.
Fixes #2310
Commit-Meldung mit Beschreibung und BREAKING CHANGE im footer
feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
Nachricht mit !
verfassen, um auf den BREAKING CHANGE aufmerksam zu machen
feat!: send an email to the customer when a product is shipped
Nachricht mit scope und !
um die Aufmerksamkeit auf den BREANKING CHANGE zu lenken
feat(api)!: send an email to the customer when a product is shipped
Commit-Meldung mit !
und BREAKING CHANGE im Footer
chore!: drop support for Node 6
BREAKING CHANGE: use JavaScript features not available in Node 6.
Commit-Nachricht ohne Text
docs: correct spelling of CHANGELOG
Commit-Nachricht mit scope
feat(lang): add Polish language
Nachricht mit mehreren Absätzen und mehreren Fußzeilen übermitteln
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
Reviewed-by: Z
Refs: #123
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
feat
, fix
, etc., followed by the OPTIONAL scope, OPTIONAL !
, and REQUIRED terminal colon and space.feat
MUST be used when a commit adds a new feature to your application or library.fix
MUST be used when a commit represents a bug fix for your application.fix(parser):
:<space>
or <space>#
separator, followed by a string value (this is inspired by the git trailer convention).-
in place of whitespace characters, e.g., Acked-by
(this helps differentiate the footer section from a multi-paragraph body). An exception is made for BREAKING CHANGE
, which MAY also be used as a token.!
immediately before the :
. If !
is used, BREAKING CHANGE:
MAY be omitted from the footer section, and the commit description SHALL be used to describe the breaking change.feat
and fix
MAY be used in your commit messages, e.g., docs: update ref docs.Deutsche Übersetzung als Orientierung:
Die Schlüsselwörter "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" und "OPTIONAL" in diesem Dokument sind wie in RFC 2119 beschrieben zu interpretieren.
feat
, fix
usw. besteht, gefolgt vom OPTIONAL scope, OPTIONAL !
und REQUIRED terminal colon und space.feat
MUSS verwendet werden, wenn ein Commit eine neue Funktion zu Ihrer Anwendung oder Bibliothek hinzufügt.fix
MUSS verwendet werden, wenn ein Commit eine Fehlerbehebung für Ihre Anwendung darstellt.fix(parser):
:<space>
- oder <space>#
-Trennzeichen, gefolgt von einem String-Wert (dies orientiert sich an der Git-Trailer-Konvention).-
anstelle von Leerzeichen verwenden, z. B. Acked-by
(dies hilft bei der Unterscheidung des Fußzeilenabschnitts von einem Text mit mehreren Absätzen). Eine Ausnahme gilt für BREAKING CHANGE
, das ebenfalls als Token verwendet werden KANN.!
unmittelbar vor dem :
angezeigt werden. Wenn !
verwendet wird, KANN BREAKING CHANGE:
in der Fußzeile weggelassen werden, und die Commit-Beschreibung MUSS verwendet werden, um die bahnbrechende Änderung zu beschreiben.feat
und fix
KÖNNEN in Ihren Commit-Nachrichten verwendet werden, z.B. docs: update ref docs.