Ken Muse
Why Your Perforce Branch History Is Missing in Git
If you’ve ever migrated a repository from Perforce to Git and wondered where all your beautiful branch and integration history went, you’re not alone. I’ve helped teams through this transition, and the migration process always creates this confusion. The issue isn’t a bug in the migration tool. It’s a fundamental difference in how these systems think about branches and history. Let me walk you through why this happens, what it means for your migrations, and why training your team is just as important as the technical migration itself.

Read this article

Understanding How Git Merges Work
Ever wonder what actually happens when you run git merge? Spoiler – it’s not magic, just some clever graph walking.

Read this article

Understanding How Git Stores Data
Ever wonder what’s really happening inside that .git folder? Discover how Git’s elegant content-addressable filesystem turns commits, branches, and merges into a simple graph of objects.

Read this article

How I Avoided Shai-Hulud's Second Coming (Part 2)
In Part 1, I shared how disabling package scripts and using dev containers saved me from Shai-Hulud. But those were just the first two layers. Here’s where things get interesting – I’ll show you how signed commits can catch unauthorized changes before they happen, and how repository protections created a final safety net. These aren’t theoretical security measures. They’re the same practical defenses I use every single day.

Read this article

The Hidden Danger in Git Ref Names
A creepy real-world branch name showed how a single Git ref can execute code in your Actions workflow and poison releases. See how the trick works, why it succeeded, and the quick fixes that turn a weaponized ref back into harmless text.

Read this article

Speed Up Git Clones With Local References
Managing a cluster of machines that each need to clone a large repository? Wondering how you can make it faster to clone a Git repo on the other side of the world? In this post, you’ll learn how Git’s reference option can dramatically reduce clone times and bandwidth usage. You’ll also learn how Git handles missing objects when your reference is out of date.

Read this article

Using Git Worktrees for Concurrent Development
Ever found yourself stuck mid-feature when a production bug demands immediate attention? What about when a colleague asks if you can take a quick look at some code? We’ve all been there, trying to safely commit incomplete work or juggling stashes so we can switch between Git branches. What if I told you Git has had a solution for over a decade (and that VS Code just added support)? Learn how Git worktrees can reduce your friction!

Read this article

How to Dynamically Authenticate With Git
Need to authenticate with different Git repositories using various credentials? This post explores how to dynamically authenticate with Git using credential helpers, environment variables, and secret management systems.

Read this article

How Does Git Authentication Work?
Ever wondered how Git actually authenticates with remote repositories? Ever needed to configure different credentials to access different repositories? This article dives into the inner workings of Git authentication, exploring the role of credential helpers, how they are implemented, and how to customize them for your needs.

Read this article

Retrieving Properties From a Gitsigned Commit
In this post, we’ll continue the exploration of Gitsign by extracting some of the attestation data from a signed commit and using it to check how the code was built. This will help you understand how you can use the attestation data in your workflows.

Read this article