June 20th, 2024

A specification for adding human/machine readable meaning to commit messages

The Conventional Commits specification simplifies commit messages for clarity and automation. It categorizes changes, aids in generating changelogs, and promotes organized development practices without strict case sensitivity requirements.

Read original articleLink Icon
A specification for adding human/machine readable meaning to commit messages

The Conventional Commits specification offers a lightweight convention for structuring commit messages, aiding both humans and machines in understanding the changes made. It simplifies creating a clear commit history, facilitating the development of automated tools. By aligning with SemVer, it categorizes commits into features, fixes, and breaking changes. The commit message format includes optional scope, body, and footer sections, with specific types like fix and feat, and the ability to indicate breaking changes. Additional types beyond fix and feat are allowed, such as docs or refactor. Conventional Commits help automate tasks like generating changelogs and determining version bumps. It enhances communication among team members and stakeholders, streamlines contribution processes, and encourages organized development practices. The specification does not mandate case sensitivity, except for breaking changes. It also provides guidance on handling revert commits and extensions to the specification. Overall, Conventional Commits aim to improve collaboration, versioning, and project management in software development.

Related

Exposition of Front End Build Systems

Exposition of Front End Build Systems

Frontend build systems are crucial in web development, involving transpilation, bundling, and minification steps. Tools like Babel and Webpack optimize code for performance and developer experience. Various bundlers like Webpack, Rollup, Parcel, esbuild, and Turbopack are compared for features and performance.

The End-of-Line Story (2004)

The End-of-Line Story (2004)

The ASCII standard lacks a unique end-of-line character, leading to varied EOL conventions in early systems. ARPAnet researchers standardized CR LF sequence for network communication, influencing protocols like Telnet and FTP. Modern systems handle EOL conversions, but issues like Control M characters can occur. Windows' CR LF simplifies cross-system transfers, contrasting Unix's LF. RFCs mandate CR LF for internet transmission, despite Unix's LF storage. Binary FTP mode preserves EOL characters, and compressed RFC collections accommodate Unix and Windows EOL conventions, crucial for data exchange.

Avoiding Emacs Bankruptcy

Avoiding Emacs Bankruptcy

Avoid "Emacs bankruptcy" by choosing efficient packages, deleting unnecessary configurations, and focusing on Emacs's core benefits. Prioritize power-to-weight ratio to prevent slowdowns and maintenance issues. Regularly reassess for a streamlined setup.

Why are module implementation and signatures separated in OCaml? (2018)

Why are module implementation and signatures separated in OCaml? (2018)

Separation of module implementation and signatures in OCaml enables scalable builds, creation of cmi files, and streamlined interface modifications. Emphasizing abstraction and implementation separation enhances modular programming and system reasoning.

Software Engineering Practices (2022)

Software Engineering Practices (2022)

Gergely Orosz sparked a Twitter discussion on software engineering practices. Simon Willison elaborated on key practices in a blog post, emphasizing documentation, test data creation, database migrations, templates, code formatting, environment setup automation, and preview environments. Willison highlights the productivity and quality benefits of investing in these practices and recommends tools like Docker, Gitpod, and Codespaces for implementation.

Link Icon 2 comments
By @daotoad - 4 months
This seems like a great idea, but in practice I found it lacking.

The big use case I see for this is to drive automatic generation of changelogs and automatically computing the next semantic version of your project. Which is a very cool idea.

The problem is that unless you carefully write every commit message in a way that makes sense for your product's changelog, the changelog ends up being unreadable garbage.

On top of that, if you're working in a monorepo, any given commit may impact multiple projects. How do you write those commit messages to make sense for three different projects? You'll always wind up with irrelevant crap in your changelog.

This problem gets magnified even further if your team is squashing commits with each PR. This means you can't even keep a discipline of isolating all the changes on a single commit to a single project. Another issue is that you can't use linters on your PR commit messages on github, so your squashed commits aren't verified to be correct.

I still love the core idea and I wish it worked better for my use cases.

By @epmatsw - 4 months
Tbh I really don't like this.

Git already has an established format for machine-readable metadata, trailers. There's even a built-in command for working with them, git interpret-trailers. This pulls data-for-computers into an area that should be data-for-humans.