CommunityCodierung & Entwicklunggithub.com

commitlint

Validiert Commit-Nachrichten anhand des Conventional-Commits-Formats mittels commitlint-Konfiguration und -Regeln.

Was ist commitlint?

Dieses Skill bietet eine umfassende Integration mit commitlint, dem Standard-Tool zur Validierung von Git-Commit-Nachrichten. Es deckt alle wesentlichen Aspekte ab: Konfigurationserkennung, Regel-Konfiguration, Fehlerbehebung und programmatische Nutzung. Das Skill unterstützt die Erkennung von Konfigurationsdateien wie `.commitlintrc`, `commitlint.config.js` oder `package.json` und bietet detaillierte Anleitungen für gängige Regelbeispiele, darunter Typ-Einschränkungen, Fallprüfungen und maximale Header-Längen. Darüber hinaus wird die Integration mit CI/CD-Pipelines und Pre-Commit-Hooks behandelt sowie das Extrahieren von Regeln zur Prompt-Erzeugung für LLMs (Large Language Models), was besonders nützlich für die automatische Generierung von Commit-Texten ist. Entwickler können mittels der programmatischen Schnittstelle (`@commitlint/lint`) eigene Validatoren implementieren oder Konfigurationen für eine konsistente Projektkommunikation auslesen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/commitlint/skills/commitlint

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht commitlint?

Validiert Commit-Nachrichten anhand des Conventional-Commits-Formats mittels commitlint-Konfiguration und -Regeln.

Wann dieses Skill verwendet werden sollte

Verwenden Sie dieses Skill, wenn:

  • Sie commitlint für ein Repository einrichten möchten
  • Sie commitlint-Regeln und gemeinsam nutzbare Konfigurationen konfigurieren möchten
  • Sie commitlint in Pre-Commit-Hooks oder CI/CD-Pipelines integrieren möchten
  • Sie Regeln aus der commitlint-Konfiguration extrahieren möchten, um LLM-Prompts zur Commit-Erzeugung zu generieren
  • Sie Commit-Nachrichten programmatisch validieren möchten
  • Sie Fehler in der commitlint-Konfiguration oder bei der Validierung beheben möchten
  • Sie die Syntax und Schweregrade der commitlint-Regeln verstehen möchten
  • Sie commitlint-Konfigurationsdateien in einem Repository erkennen möchten

Kernfähigkeiten

Konfigurationserkennung

Commitlint verwendet cosmiconfig, um Konfigurationsdateien in dieser Prioritätsreihenfolge zu finden:

Dedizierte Konfigurationsdateien:

.commitlintrc
.commitlintrc.json
.commitlintrc.yaml
.commitlintrc.yml
.commitlintrc.js
.commitlintrc.cjs
.commitlintrc.mjs
.commitlintrc.ts
.commitlintrc.cts
commitlint.config.js
commitlint.config.cjs
commitlint.config.mjs
commitlint.config.ts
commitlint.config.cts

Paketdateien:

  • package.json mit Feld commitlint
  • package.yaml (PNPM) mit Feld commitlint

Konfigurationsformate

JavaScript ES Modules (Empfohlen):

// commitlint.config.js oder commitlint.config.mjs
export default {
  extends: ['@commitlint/config-conventional'],
};

TypeScript:

// commitlint.config.ts
import type { UserConfig } from '@commitlint/types';
import { RuleConfigSeverity } from '@commitlint/types';

const config: UserConfig = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [RuleConfigSeverity.Error, 'always', ['feat', 'fix', 'docs']],
  },
};

export default config;

JSON:

{
  "extends": ["@commitlint/config-conventional"]
}

YAML:

extends:
  - "@commitlint/config-conventional"

Regelkonfiguration

Regeln werden als Arrays konfiguriert: [Schweregrad, Anwendbarkeit, Wert]

Schweregrade:

StufeBedeutungTypeScript-Enum
0DeaktiviertRuleConfigSeverity.Disabled
1WarnungRuleConfigSeverity.Warning
2FehlerRuleConfigSeverity.Error

Anwendbarkeit:

  • 'always' - Regel muss zutreffen
  • 'never' - Regel darf nicht zutreffen

Beispielregeln:

rules: {
  // Fehler, wenn der Typ nicht in der Aufzählung ist
  'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert']],

  // Fehler, wenn der Typ leer ist
  'type-empty': [2, 'never'],

  // Fehler, wenn der Betreff leer ist
  'subject-empty': [2, 'never'],

  // Fehler, wenn der Header 100 Zeichen überschreitet
  'header-max-length': [2, 'always', 100],

  // Fehler, wenn der Betreff mit einem Punkt endet
  'subject-full-stop': [2, 'never', '.'],

  // Warnung, wenn der Textkörper keine führende Leerzeile hat
  'body-leading-blank': [1, 'always'],
}

Häufige Konfigurationen

@commitlint/config-conventional

Die am weitesten verbreitete gemeinsam nutzbare Konfiguration. Standard-Fehler-Regeln:

RegelKonfigurationBestandenes BeispielFehlgeschlagenes Beispiel
type-enum['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test']fix: nachrichtfoo: nachricht
type-case'lowerCase'fix: nachrichtFIX: nachricht
type-emptyneverfix: nachricht: nachricht
subject-casenever + ['sentence-case', 'start-case', 'pascal-case', 'upper-case']fix: eine nachrichtfix: Eine Nachricht
subject-emptyneverfix: nachrichtfix:
subject-full-stopnever, '.'fix: nachrichtfix: nachricht.
header-max-length100Kurzer HeaderHeader > 100 Zeichen
body-leading-blankalways (Warnung)Leerzeile vor TextkörperKeine Leerzeile
body-max-line-length100Zeilen <= 100 ZeichenZeile > 100 Zeichen
footer-leading-blankalways (Warnung)Leerzeile vor FußzeileKeine Leerzeile
footer-max-line-length100Zeilen <= 100 ZeichenZeile > 100 Zeichen

Vollständiges Konfigurationsschema

// commitlint.config.js
export default {
  // Gemeinsam nutzbare Konfigurationen erweitern (aufgelöst über node-Auflösung)
  extends: ['@commitlint/config-conventional'],

  // Parser-Voreinstellung zum Parsen von Commit-Nachrichten
  parserPreset: 'conventional-changelog-atom',

  // Ausgabeformatierer
  formatter: '@commitlint/format',

  // Benutzerdefinierte Regeln (überschreiben geerbte Regeln)
  rules: {
    'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore']],
  },

  // Funktionen, die true zurückgeben, um bestimmte Commits zu ignorieren
  // Mit Standard-Ignores zusammengeführt (Merge-Commits, Reverts, Semver-Tags)
  ignores: [(commit) => commit.includes('WIP')],

  // Ob Standard-Ignore-Muster verwendet werden sollen
  // Standardmuster: 'Merge pull request', 'Revert X', 'v1.2.3', usw.
  defaultIgnores: true,

  // Benutzerdefinierte Hilfe-URL bei Fehlschlag
  helpUrl: 'https://example.com/commit-guidelines',

  // Prompt-Konfiguration (für @commitlint/cz-commitlint)
  prompt: {
    messages: {},
    questions: {
      type: {
        description: 'Wählen Sie die Art der Änderung:',
      },
    },
  },
};

CLI-Nutzung

Installation

# npm
npm install -D @commitlint/cli @commitlint/config-conventional

# yarn
yarn add -D @commitlint/cli @commitlint/config-conventional

# pnpm
pnpm add -D @commitlint/cli @commitlint/config-conventional

Häufige Befehle

# Letzten Commit prüfen
npx commitlint --last

# Einen Bereich von Commits prüfen
npx commitlint --from HEAD~5

# Ab einem bestimmten Commit prüfen
npx commitlint --from abc1234

# Nachricht von stdin prüfen
echo "feat: funktion hinzufügen" | npx commitlint

# Nachricht aus Datei prüfen
npx commitlint < .git/COMMIT_EDITMSG

# Mit edit-Flag prüfen (liest .git/COMMIT_EDITMSG)
npx commitlint --edit

# Mit benutzerdefiniertem Konfigurationspfad prüfen
npx commitlint --config ./custom-commitlint.config.js

# Aufgelöste Konfiguration ausgeben
npx commitlint --print-config

# Strikter Modus (Warnungen werden zu Exit-Code 2)
npx commitlint --last --strict

Exit-Codes

CodeBedeutung
0Erfolg (keine Fehler)
1Lint-Fehler gefunden
2Warnungen gefunden (nur strikter Modus)
3Fehler gefunden (strikter Modus)
9Konfigurationsdatei fehlt (mit -g-Flag)

Regelreferenz

Typ-Regeln

RegelBedingungStandard-Anwendbarkeit
type-enumtype ist im Wert enthaltenalways
type-casetype ist in Groß-/Kleinschreibung valuealways, 'lower-case'
type-emptytype ist leernever
type-max-lengthtype hat value oder weniger Zeichenalways, Infinity
type-min-lengthtype hat value oder mehr Zeichenalways, 0

Betreff-Regeln

RegelBedingungStandard-Anwendbarkeit
subject-casesubject ist in Groß-/Kleinschreibung valuealways
subject-emptysubject ist leernever
subject-full-stopsubject endet mit valuenever, '.'
subject-max-lengthsubject hat value oder weniger Zeichenalways, Infinity
subject-min-lengthsubject hat value oder mehr Zeichenalways, 0
subject-exclamation-marksubject hat Ausrufezeichen vor :never

Bereichs-Regeln

RegelBedingungStandard-Anwendbarkeit
scope-enumscope ist im Wert enthaltenalways, []
scope-casescope ist in Groß-/Kleinschreibung valuealways, 'lower-case'
scope-emptyscope ist leernever
scope-max-lengthscope hat value oder weniger Zeichenalways, Infinity
scope-min-lengthscope hat value oder mehr Zeichenalways, 0

Header-Regeln

RegelBedingungStandard-Anwendbarkeit
header-caseheader ist in Groß-/Kleinschreibung valuealways, 'lower-case'
header-full-stopheader endet mit valuenever, '.'
header-max-lengthheader hat value oder weniger Zeichenalways, 72
header-min-lengthheader hat value oder mehr Zeichenalways, 0
header-trimheader hat keine führenden/abschließenden Leerzeichenalways

Textkörper-Regeln

RegelBedingungStandard-Anwendbarkeit
body-leading-blankbody beginnt mit leerer Zeilealways
body-emptybody ist leernever
body-max-lengthbody hat value oder weniger Zeichenalways, Infinity
body-max-line-lengthZeilen von body haben value oder weniger Zeichen (URLs ausgeschlossen)always, Infinity
body-min-lengthbody hat value oder mehr Zeichenalways, 0
body-casebody ist in Groß-/Kleinschreibung valuealways, 'lower-case'
body-full-stopbody endet mit valuenever, '.'

Fußzeilen-Regeln

RegelBedingungStandard-Anwendbarkeit
footer-leading-blankfooter beginnt mit leerer Zeilealways
footer-emptyfooter ist leernever
footer-max-lengthfooter hat value oder weniger Zeichenalways, Infinity
footer-max-line-lengthZeilen von footer haben value oder weniger Zeichenalways, Infinity
footer-min-lengthfooter hat value oder mehr Zeichenalways, 0

Groß-/Kleinschreibungs-Werte

Für Regeln, die die Groß-/Kleinschreibung prüfen (*-case):

[
  'lower-case',    // kleinschreibung
  'upper-case',    // GROSSSCHREIBUNG
  'camel-case',    // camelCase
  'kebab-case',    // kebab-case
  'pascal-case',   // PascalCase
  'sentence-case', // Satzschreibung
  'snake-case',    // snake_case
  'start-case',    // Start Case
]

Programmatische Nutzung

Konfiguration laden

import load from '@commitlint/load';

async function getCommitlintConfig() {
  const config = await load();
  console.log(config.rules);
  return config;
}

Nachricht validieren

import load from '@commitlint/load';
import lint from '@commitlint/lint';

async function validateMessage(nachricht) {
  const config = await load();
  const result = await lint(nachricht, config.rules);

  return {
    valid: result.valid,
    errors: result.errors,
    warnings: result.warnings,
  };
}

LLM-Integrationsmuster

Regeln für die Prompt-Erzeugung extrahieren

LLM-freundliche Einschränkungen aus der commitlint-Konfiguration erzeugen:

def extract_rules_for_prompt(config: dict) -> str:
    """Extrahiert commitlint-Regeln in ein LLM-freundliches Format."""
    rules = config.get("rules", {})
    prompt_parts = []

    # type-enum extrahieren, falls vorhanden
    if "type-enum" in rules:
        level, applicability, types = rules["type-enum"]
        if level > 0 and applicability == "always":
            prompt_parts.append(f"Erlaubte Commit-Typen: {', '.join(types)}")

    # scope-enum extrahieren, falls vorhanden
    if "scope-enum" in rules:
        level, applicability, scopes = rules["scope-enum"]
        if level > 0 and applicability == "always":
            prompt_parts.append(f"Erlaubte Bereiche: {', '.join(scopes)}")

    # header-max-length extrahieren, falls vorhanden
    if "header-max-length" in rules:
        level, applicability, max_len = rules["header-max-length"]
        if level > 0:
            prompt_parts.append(f"Maximale Header-Länge: {max_len} Zeichen")

    # subject-case extrahieren, falls vorhanden
    if "subject-case" in rules:
        level, applicability, case = rules["subject-case"]
        if level > 0 and applicability == "always":
            prompt_parts.append(f"Groß-/Kleinschreibung des Betreffs: {case}")

    return "\n".join(prompt_parts)

Commit-Vorlage erzeugen

function generateLlmPrompt(config) {
  const rules = config.rules || {};

  let prompt = `Generieren Sie eine gültige Git-Commit-Nachricht im Conventional-Commits-Format.\n`;
  prompt += `Format: <typ>(<bereich>): <betreff>\n\n<textkörper>\n\n<fußzeile>\n\n`;
  prompt += `Regeln:\n`;

  if (rules['type-enum']) {
    prompt += `- Typ muss einer der folgenden sein: ${rules['type-enum'][2].join(', ')}\n`;
  }

  if (rules['header-max-length']) {
    prompt += `- Header darf maximal ${rules['header-max-length'][2]} Zeichen lang sein\n`;
  }

  if (rules['subject-case']) {
    prompt += `- Betreff muss in ${rules['subject-case'][2]}-Schreibweise sein\n`;
  }

  return prompt;
}

Konfiguration aus Repository erkennen

def detect_commitlint_config(repo_path: str) -> Optional[dict]:
    """Erkennt und lädt commitlint-Konfiguration aus einem Repository."""
    import os
    import json

    config_files = [
        ".commitlintrc",
        ".commitlintrc.json",
        ".commitlintrc.yaml",
        ".commitlintrc.yml",
        ".commitlintrc.js",
        ".commitlintrc.cjs",
        ".commitlintrc.mjs",
        ".commitlintrc.ts",
        ".commitlintrc.cts",
        "commitlint.config.js",
        "commitlint.config.cjs",
        "commitlint.config.mjs",
        "commitlint.config.ts",
        "commitlint.config.cts",
    ]

    for file in config_files:
        path = os.path.join(repo_path, file)
        if os.path.exists(path):
            with open(path) as f:
                if file.endswith(".json"):
                    return json.load(f)
                # Bei JS/TS-Dateien könnte eine komplexere Implementierung erforderlich sein
                return {"file": file}

    # In package.json suchen
    package_path = os.path.join(repo_path, "package.json")
    if os.path.exists(package_path):
        with open(package_path) as f:
            package = json.load(f)
            if "commitlint" in package:
                return package["commitlint"]

    return None

Fehlerbehebung

Häufige Probleme

Problem: „Configuration file not found“

  • Stellen Sie sicher, dass die Konfigurationsdatei vorhanden ist
  • Überprüfen Sie die Schreibweise der Dateinamen, die in cosmiconfig unterstützt werden
  • Bei globaler Installation verwenden Sie das --config-Flag oder -g

Problem: Regeln werden nicht angewendet

  • Überprüfen Sie die Regel-Schreibweise (z. B. type-enum vs. type_enum)
  • Stellen Sie sicher, dass der Schweregrad größer als 0 ist
  • Stellen Sie sicher, dass die Anwendbarkeit korrekt ist ('always' vs. 'never')
  • Überprüfen Sie, ob erweiterte Konfigurationen (extends) Regeln überschreiben

Problem: CI schlägt mit Exit-Code 1 fehl

  • Prüfen Sie den letzten Commit auf Formatierungsprobleme vor dem Pushen
  • Verwenden Sie commitlint --last, um den letzten Commit lokal zu prüfen
  • Erwägen Sie die Verwendung von Husky mit commitlint als Pre-Commit-Hook
  • Wenn Warnungen toleriert werden sollen, deaktivieren Sie Warnungsregeln oder setzen Sie sie auf Schweregrad 0

Problem: TypeScript-Konfiguration wird nicht geladen

  • Installieren Sie ts-node oder tsx für die TypeScript-Ausführung
  • Konfiguration auf JavaScript umstellen oder als Fallback eine JSON-Datei hinzufügen
  • Überprüfen Sie die tsconfig.json auf korrekte Modulauflösungseinstellungen

Debugging-Modus

# Detaillierte Ausgabe aktivieren
npx commitlint --last --verbose

# Aufgelöste Konfiguration prüfen
npx commitlint --print-config

# Einen bestimmten Commit mit einem bestimmten Format prüfen
echo "fix: korrektur" | npx commitlint

# Parsing-Fehler debuggen
npx commitlint --last --help

Hilfreiche Ressourcen

Kompatibilität

  • Node.js >= 18 (für commitlint 19.x)
  • Node.js >= 14 (für commitlint 18.x)
  • Unterstützt TypeScript, ESM und CommonJS (CJS)
  • Funktionen als Pre-Commit-Hook (Husky, lefthook) oder CI-Integration (GitHub Actions, GitLab CI, CircleCI)

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Jamie-BitFlight/agentskill-kaizen-meta-docs

Agentskill kaizen plugin documentation index. Load when needing to read about cross-platform notes, improvement plans, or DuckDB integration.

Jamie-BitFlight/bash-51-features

Bash 5.1 release features and improvements with practical examples. Use when working with Bash 5.1 features, epoch time variables, redirection enhancements, or when user asks about Bash 5.1 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-52-features

Bash 5.2 release features and improvements with practical examples. Use when working with Bash 5.2 features, variable handling enhancements, readline improvements, or when user asks about Bash 5.2 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-53-features

Bash 5.3 release features and improvements with practical examples. Use when working with Bash 5.3 features, new command substitution, GLOBSORT, loadable builtins, or when user asks about Bash 5.3 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-development

This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.

Jamie-BitFlight/bash-lint

This skill should be used when the user asks to "lint bash script", "run shellcheck", "format shell script", "use shfmt", "fix shellcheck errors", or mentions shell script linting, formatting, code quality, or pre-commit hooks for bash.

Jamie-BitFlight/bash-logging

This skill should be used when the user asks to "add logging to bash script", "colorize output", "implement log levels", "CI/CD sections", "terminal colors in bash", or mentions logging functions, emoji output, collapsible CI sections, or shlocksmith.

Jamie-BitFlight/bash-portability

This skill should be used when the user asks about "POSIX compatibility", "portable shell scripts", "cross-shell compatibility", "bashisms", "shebang selection", or mentions writing scripts that work on different shells (bash, sh, dash, zsh) or different systems.

Jamie-BitFlight/bash-testing

This skill should be used when the user asks to "test bash script", "write shell tests", "use shunit2", "use shellspec", "create test suite for bash", or mentions unit testing, test frameworks, mocking, or test-driven development for shell scripts.

Jamie-BitFlight/brainstorming-skill

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or when users request help with ideation, marketing, and strategic planning. Explores user intent, requirements, and design before implementation using research-validated prompt patterns.

Jamie-BitFlight/clang-format

Configure clang-format code formatting. Use when: user mentions clang-format or .clang-format, analyzing code style/patterns, creating/modifying formatting config, troubleshooting formatting, brace styles/indentation/spacing/alignment/pointer alignment, or codifying conventions.

Jamie-BitFlight/conventional-commits

When writing a git commit message. When task completes and changes need committing. When project uses semantic-release, commitizen, git-cliff. When choosing between feat/fix/chore/docs types. When indicating breaking changes. When generating changelogs from commit history.

Jamie-BitFlight/dasel-reference

Use when querying, modifying, or converting JSON, YAML, TOML, XML, CSV, HCL, or INI with dasel v3. Complete reference for selectors, functions, conditionals, variables, spread operator, type casting, and format-specific patterns.

Jamie-BitFlight/data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

Jamie-BitFlight/data-transformation

Use when modifying, converting, or transforming structured data with dasel v3 — in-place mutations, format conversion, batch operations, array manipulation, object construction, and merge patterns across JSON, YAML, TOML, XML, CSV, HCL, INI

Jamie-BitFlight/delegate

Decompose substantive work into phases, dispatch each phase to a sub-agent, and adjudicate what comes back. Use whenever a request asks for implementation, investigation, a fix, a review, or any change to files — including small ones — and whenever you are about to read source or run a diagnostic yourself instead of handing it off. Also use when a report from a sub-agent needs judging, when a phase needs re-dispatching, or when a user names one instance of a pattern. Does not apply when your own prompt begins "Your ROLE_TYPE is sub-agent." — then follow references/sub-agent-contract.md instead.

Jamie-BitFlight/enterprise-hibernate-hbm

Dasel v3 query patterns for Hibernate .hbm.xml mapping files — entity-table binding, Java property-to-column extraction, one-to-many set/list/bag relationship tracing, many-to-one foreign key discovery, batch scanning across 60+ HBM files. Use when querying Hibernate ORM class mappings, extracting schema metadata from Java persistence layer, or auditing entity-column relationships in enterprise legacy codebases.

Jamie-BitFlight/enterprise-installanywhere

Dasel v3 query patterns for InstallAnywhere .iap_xml installer definitions — use when querying action sequences, discovering variables, resolving platform conditions, navigating panels, or comparing installer variants. Files are 2.5+ MB, 65,000+ lines — too large for context reads, requires structural dasel queries.

Jamie-BitFlight/enterprise-maven-pom

Dasel v3 selector patterns for Maven POM XML files — use when querying dependency versions, filtering by groupId or scope, extracting module hierarchy from parent POMs, or detecting version conflicts across enterprise multi-module Java projects. Load this skill when working with pom.xml files using dasel.

Jamie-BitFlight/enterprise-spring-xml

Dasel v3 selectors for Spring bean factory XML — use when querying any Spring ApplicationContext XML for bean discovery, dependency wiring, JMS destination mapping, property injection extraction, or cross-bean reference tracing. Load this skill before writing dasel selectors against Spring bean XML files (applicationContext.xml, *_beans.xml, spring-*.xml).

Verwandte Skills