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

Saying Goodbye to 2025 And Welcoming 2026
As 2025 comes to a close, I’m reflecting on a year of unexpected opportunities, new learnings, and a bit of personal growth. Writing, traveling, and speaking … this year has been a journey of growth and connection. Today I celebrate the many small wins and look forward to what 2026 has in store.

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

Deploying Services on GitHub Runner Custom Images
What if you could run your own Docker registry, package cache, or proxy directly on your GitHub runners? Because custom images give you administrative rights, you can deploy persistent services that stick around for every workflow. In this post, you’ll discover how to turn your runners into powerful infrastructure hubs that speed up builds and cut your external dependencies dramatically.

Read this article

Caching Repositories on GitHub Runner Custom Images
Waiting minutes for a massive repository to clone in every workflow run is painful. I’ll show you how to bake that repository into your custom GitHub runner image and then use Git’s reference clone feature – a clever trick that cuts clone times from minutes to seconds.

Read this article

Masking Sensitive Information on GitHub Runner Custom Images
When using GitHub custom images, you may need to handle sensitive information at different stages of the image lifecycle. Today, you’ll learn to use workflow commands to mask sensitive data during both image creation and job execution, ensuring secrets stay protected in your build logs.

Read this article

Using GitHub Custom Images with OIDC
Sometimes you need to configure the workflow’s runner dynamically before it runs any steps. For example, you may need the runner to get access to a set of secure resources. This post shows how to use OpenID Connect (OIDC) tokens to avoid storing secrets or using long-lived credentials.

Read this article

Pre-Caching Docker Images on GitHub Runner Custom Images
If you run your jobs in containers or use service containers, you may spend a lot of time waiting. If those images are outside of your runner environment, then you may also be seeing rising egress charges from your cloud provider. Let’s change that. Learn how pre-caching Docker images in custom runner images can significantly reduce workflow execution time by eliminating redundant layer downloads.

Read this article

Using GitHub Custom Images for Workflow Validation
There’s a lot that custom runner images can do for your security. This post shows how pre-job scripts in custom runner images can enforce workflow validation that workflow authors can’t bypass – so only approved workflows run on your GitHub Actions runners.

Read this article