<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xx="tags" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Git - Ken Muse</title><atom:link href="https://www.kenmuse.com/tags/git/rss/" rel="self" type="application/rss+xml"/><link>https://www.kenmuse.com/tags/git/</link><description>Discover Azure, DevOps, and development insights with Ken Muse, a DevOps Architect at GitHub and 4x Microsoft Azure MVP</description><language>en-us</language><sy:updatePeriod>weekly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><image><title>Git - Ken Muse</title><link>https://www.kenmuse.com/tags/git/</link><width>32</width><url>https://www.kenmuse.com/tags/git/favicon/favicon-32x32.png</url><height>32</height></image><atom:link href="https://www.kenmuse.com/tags/git/rss/index.xml" rel="self" type="application/rss+xml"/><item><title>Storing Data in Git Objects With Notes</title><link>https://www.kenmuse.com/blog/storing-data-in-git-objects-with-notes/</link><pubDate>Thu, 15 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">storing-data-in-git-objects-with-notes</guid><category>DevOps</category><description>Learn how to use Git notes to attach metadata like build results or review comments to commits without rewriting history or breaking signatures.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/storing-data-in-git-objects-with-notes/images/banner.jpg"/></item><item><title>Why Your Perforce Branch History Is Missing in Git</title><link>https://www.kenmuse.com/blog/why-perforce-branch-history-is-missing-in-git/</link><pubDate>Thu, 08 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">why-perforce-branch-history-is-missing-in-git</guid><category>DevOps</category><category>GitHub</category><description>Your Perforce branch history vanishes in Git because Git has no place to store it -- here's why and how to help your team adapt.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/why-perforce-branch-history-is-missing-in-git/images/banner.jpg"/></item><item><title>Understanding How Git Merges Work</title><link>https://www.kenmuse.com/blog/understanding-how-git-merges-work/</link><pubDate>Fri, 02 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-how-git-merges-work</guid><category>DevOps</category><category>GitHub</category><description>Demystifying Git merges -- from merge commits and fast-forwards to rebases and cherry-picks. Learn what's really happening under the hood.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-how-git-merges-work/images/merging.png"/></item><item><title>Understanding How Git Stores Data</title><link>https://www.kenmuse.com/blog/understanding-how-git-stores-data/</link><pubDate>Mon, 29 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-how-git-stores-data</guid><category>DevOps</category><category>GitHub</category><description>A deep dive into Git's internal storage model -- how blobs, trees, and commits work together to track your code's history without a traditional database.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/understanding-how-git-stores-data/images/banner.jpg"/></item><item><title>How I Avoided Shai-Hulud's Second Coming (Part 2)</title><link>https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-2/</link><pubDate>Fri, 28 Nov 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">how-i-avoided-shai-hulud-second-coming-part-2</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>How signed commits and repository protections completed my defense against the Shai-Hulud supply chain attack.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-2/images/activity-log.webp"/></item><item><title>The Hidden Danger in Git Ref Names</title><link>https://www.kenmuse.com/blog/the-hidden-danger-in-git-ref-names/</link><pubDate>Fri, 31 Oct 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">the-hidden-danger-in-git-ref-names</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>A Halloween lesson: how a weaponized Git branch name let attackers inject code via a GitHub expression and the simple steps you can take to block it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-hidden-danger-in-git-ref-names/images/halloween-banner.png"/></item><item><title>Speed Up Git Clones With Local References</title><link>https://www.kenmuse.com/blog/speed-up-git-clones-with-local-references/</link><pubDate>Fri, 03 Oct 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">speed-up-git-clones-with-local-references</guid><category>DevOps</category><category>GitHub</category><description>Discover how to optimize Git clones by using references to share repository data and Git LFS objects across multiple systems.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/speed-up-git-clones-with-local-references/images/banner.png"/></item><item><title>Using Git Worktrees for Concurrent Development</title><link>https://www.kenmuse.com/blog/using-git-worktrees-for-concurrent-development/</link><pubDate>Fri, 08 Aug 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">using-git-worktrees-for-concurrent-development</guid><category>DevOps</category><category>GitHub</category><description>Discover Git worktrees and learn how you can work with multiple branches simultaneously without stashing or committing incomplete code.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/using-git-worktrees-for-concurrent-development/images/header-dark.webp"/></item><item><title>How to Dynamically Authenticate With Git</title><link>https://www.kenmuse.com/blog/how-to-dynamically-authenticate-with-git/</link><pubDate>Tue, 06 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">how-to-dynamically-authenticate-with-git</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Discover practical techniques for dynamically authenticating with Git using environment variables or secret vaults to retrieve user credentials.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-to-dynamically-authenticate-with-git/images/banner.webp"/></item><item><title>How Does Git Authentication Work?</title><link>https://www.kenmuse.com/blog/how-does-git-authentication-work/</link><pubDate>Sat, 03 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">how-does-git-authentication-work</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Discover the intricacies of Git authentication, how it works, and how to configure credential helpers to allow fine-grained control over authentication.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-does-git-authentication-work/images/banner.webp"/></item><item><title>Retrieving Properties From a Gitsigned Commit</title><link>https://www.kenmuse.com/blog/retrieving-properties-from-a-gitsigned-commit/</link><pubDate>Wed, 16 Apr 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">retrieving-properties-from-a-gitsigned-commit</guid><category>DevOps</category><category>Security</category><description>Learn how to extract and validate signed Git commits using the Gitsign certificates and OpenSSL to enhance your software supply chain security.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/retrieving-properties-from-a-gitsigned-commit/images/banner.png"/></item><item><title>Using Gitsign for Keyless Git Commit Signing</title><link>https://www.kenmuse.com/blog/using-gitsign-for-keyless-git-commit-signing/</link><pubDate>Sat, 12 Apr 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">using-gitsign-for-keyless-git-commit-signing</guid><category>DevOps</category><category>Security</category><description>Use Gitsign and GitHub Actions for keyless Git commit signing to enhance supply chain security and ensure code provenance without managing private keys.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-gitsign-for-keyless-git-commit-signing/images/banner.png"/></item><item><title>The Secret Life of Git Large File Storage</title><link>https://www.kenmuse.com/blog/secret-life-of-git-lfs/</link><pubDate>Sat, 25 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">secret-life-of-git-lfs</guid><category>DevOps</category><category>GitHub</category><description>Uncover the hidden secrets and inner workings of Git LFS! Learn the tricks behind how it uses native Git extensibility features to manage your large files.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/secret-life-of-git-lfs/images/git-lfs-push-hooks.png"/></item><item><title>Migrating Git With An LFS Configuration File</title><link>https://www.kenmuse.com/blog/migrating-git-with-lfs-config-file/</link><pubDate>Sat, 18 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">migrating-git-with-lfs-config-file</guid><category>DevOps</category><category>GitHub</category><description>Learn how to configure Git LFS endpoints and to safely migrate repositories that are using .lfsconfig to manage the storage location.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/migrating-git-with-lfs-config-file/images/banner.jpg"/></item><item><title>Exploring The Three Flavors of GitOps</title><link>https://www.kenmuse.com/blog/three-flavors-of-gitops/</link><pubDate>Sat, 14 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">three-flavors-of-gitops</guid><category>DevOps</category><description>Discover the world of GitOps, where Git becomes your source of truth for deployments and learn the three models for defining your GitOps practices.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/three-flavors-of-gitops/images/banner.jpg"/></item><item><title>Migrating Submodules That Use Large File Storage (LFS)</title><link>https://www.kenmuse.com/blog/migrating-submodules-with-large-files-storage-lfs/</link><pubDate>Sat, 09 Nov 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">migrating-submodules-with-large-files-storage-lfs</guid><category>DevOps</category><category>GitHub</category><description>When repositories are migrated, it's easy to break the links to the submodules. In this post, learn why it happens, how to avoid it, and how to fix it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/migrating-submodules-with-large-files-storage-lfs/images/banner.png"/></item><item><title>The Ultimate Tips for Working With Large Git Monorepos</title><link>https://www.kenmuse.com/blog/tips-for-large-monorepos-on-github/</link><pubDate>Sat, 03 Aug 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">tips-for-large-monorepos-on-github</guid><category>DevOps</category><category>GitHub</category><description>Large codebases are difficult, but there are ways to improve the experience. Learn some of the key settings and best practices for handling large Git monorepos.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/tips-for-large-monorepos-on-github/images/banner.jpg"/></item><item><title>Troubleshooting Git Authentication</title><link>https://www.kenmuse.com/blog/troubleshooting-git-authentication/</link><pubDate>Fri, 16 Feb 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">troubleshooting-git-authentication</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>Whether you're dealing with bad credentials or connectivity issues, there are a few tricks with Git that can make it easier to understand what's happening.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/troubleshooting-git-authentication/images/banner.png"/></item><item><title>Automatic SSH Commit Signing With 1Password</title><link>https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-1password/</link><pubDate>Fri, 10 Nov 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">automatic-ssh-commit-signing-with-1password</guid><category>DevOps</category><category>Programming</category><description>Learn how to automate SSH commit signing with 1Password and dotfiles to enable others to verify the authenticity of your Git commits.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-1password/images/banner.png"/></item><item><title>Automatic SSH Commit Signing With Dotfiles</title><link>https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-dotfiles/</link><pubDate>Thu, 19 Oct 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">automatic-ssh-commit-signing-with-dotfiles</guid><category>DevOps</category><category>Programming</category><description>&lt;p&gt;I previously talked about
&lt;a class="" href="https://www.kenmuse.com/blog/the-magic-of-dotfiles/" target="_self"&gt;how dotfiles can improve the development experience&lt;/a&gt;. By automating the processing of setting up your environment, you are free to focus on more important things. One of the more mundane tasks for developers is setting up commit signing and verification. By doing this, others can verify that you are the author of a specific commit. It just requires some setup, especially if you want automatic support in your dev containers. For these examples, I&amp;rsquo;m going to use SSH-based commit signing. It&amp;rsquo;s a common approach, and it doesn&amp;rsquo;t require sharing a private key between environments.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-dotfiles/images/banner.jpg"/></item><item><title>Shared Commits and GitHub Checks</title><link>https://www.kenmuse.com/blog/shared-commits-and-github-checks/</link><pubDate>Thu, 21 Sep 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">shared-commits-and-github-checks</guid><category>DevOps</category><category>GitHub</category><description>Using a pull request to merge the same commit to multiple branches causes GitHub Checks and validations to fail. Learn the technique needed to fix this issue.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/shared-commits-and-github-checks/images/work-branch.png"/></item><item><title>Why You Should (Not) Prefer Monorepos For Git</title><link>https://www.kenmuse.com/blog/why-you-should-not-prefer-monorepos-for-git/</link><pubDate>Fri, 23 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">why-you-should-not-prefer-monorepos-for-git</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>Monorepos are often seen as the simple solution to complex collaboration and code management problems. Like with most quick fixes, the devil's in the details.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/why-you-should-not-prefer-monorepos-for-git/images/banner.jpg"/></item><item><title>Dubious Ownership With Static Web Apps</title><link>https://www.kenmuse.com/blog/dubious-ownership-with-static-web-apps/</link><pubDate>Thu, 11 May 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">dubious-ownership-with-static-web-apps</guid><category>DevOps</category><category>Containers</category><description>Git's safe directory configuration helps to protect users, but it can create challenges. This is especially true when using Hugo with Azure Static Web Sites.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/dubious-ownership-with-static-web-apps/images/banner.png"/></item><item><title>The Life of a Commit After Git Squash</title><link>https://www.kenmuse.com/blog/life-after-git-squash/</link><pubDate>Fri, 31 Mar 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">life-after-git-squash</guid><category>DevOps</category><category>GitHub</category><description>Explore what happens to files in Git after squashing a set of commits that have a tag applied to them. What happens to the commits and the tag may surprise you!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/life-after-git-squash/images/banner.png"/></item><item><title>Using Git SSH From Docker With a Local Proxy</title><link>https://www.kenmuse.com/blog/using-git-ssh-from-docker-with-a-local-proxy/</link><pubDate>Thu, 22 Dec 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">using-git-ssh-from-docker-with-a-local-proxy</guid><category>DevOps</category><category>GitHub</category><description>Learn the dev container trick for accessing a host port to create a proxy SSH connection to a Git server.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-git-ssh-from-docker-with-a-local-proxy/images/banner.png"/></item><item><title>SSH and Multiple Git Credentials</title><link>https://www.kenmuse.com/blog/ssh-and-multiple-git-credentials/</link><pubDate>Thu, 15 Dec 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">ssh-and-multiple-git-credentials</guid><category>DevOps</category><category>GitHub</category><description>Learn a trick for using SSH to connect to multiple GitHub environments and Git hosts with minimal effort.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/ssh-and-multiple-git-credentials/images/banner.png"/></item><item><title>Comparing GitHub Commit Signing Options</title><link>https://www.kenmuse.com/blog/comparing-github-commit-signing-options/</link><pubDate>Fri, 07 Oct 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">comparing-github-commit-signing-options</guid><category>GitHub</category><description>&lt;p&gt;I recently had an interesting discussion where we tried to explore some of the ways you can sign commits in Git and GitHub. If you&amp;rsquo;re not familiar with the functionality, Git provides mechanisms for signing commits and tags to ensure authorship. By default, Git trusts that the user name and email that you provide to &lt;code&gt;git config&lt;/code&gt; is legitimate. For many organizations, that may be perfectly acceptable. If only limited people have access to the repository, this is often enough.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/comparing-github-commit-signing-options/images/banner.jpg"/></item><item><title>Marking Workspaces Safe with Dotfiles</title><link>https://www.kenmuse.com/blog/marking-workspaces-safe/</link><pubDate>Thu, 18 Aug 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">marking-workspaces-safe</guid><category>DevOps</category><category>Containers</category><description>There's a great way to use dotfiles to eliminate the "detected dubious ownership in repository" message in every dev container automatically.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/marking-workspaces-safe/images/banner.jpg"/></item><item><title>Avoiding Dubious Ownership in Dev Containers</title><link>https://www.kenmuse.com/blog/avoiding-dubious-ownership-in-dev-containers/</link><pubDate>Thu, 11 Aug 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">avoiding-dubious-ownership-in-dev-containers</guid><category>DevOps</category><category>Containers</category><description>Getting the message "detected dubious ownership in repository" in your dev container? Learn how to eliminate this error.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/avoiding-dubious-ownership-in-dev-containers/images/banner.jpg"/></item><item><title>Creating a .gitattributes Without Committing</title><link>https://www.kenmuse.com/blog/creating-a-gitattributes-without-committing/</link><pubDate>Wed, 06 Jul 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-gitattributes-without-committing</guid><category>DevOps</category><description>Did you know that you can specify file handling in Git without committing a .gitattributes file? Learn how to configure a Git repo without a commit.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-gitattributes-without-committing/images/banner.png"/></item><item><title>What Is The .gitattributes File?</title><link>https://www.kenmuse.com/blog/what-is-gitattributes/</link><pubDate>Wed, 29 Jun 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">what-is-gitattributes</guid><category>DevOps</category><description>&lt;p&gt;Sometimes you see the file in a project. It&amp;rsquo;s just sitting there, somehow influencing Git. But what is
&lt;a class="external-link" href="https://git-scm.com/docs/gitattributes" arial-label="The .gitattributes link opens in a new tab" target="_blank"&gt;&lt;code&gt;.gitattributes&lt;/code&gt;&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;? In short, it is a basic text document that associates attributes and behaviors with specific file types. At its most basic, it configures how files matching certain patterns (usually file extensions) are handled. Common scnearios include configuring how the line feeds are handled, whether the document is treated as a binary (non-diffable), and providing special processing before a commit or after checkout.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-is-gitattributes/images/banner.png"/></item><item><title>Creating a .gitignore Without Committing</title><link>https://www.kenmuse.com/blog/creating-a-gitignore-without-committing/</link><pubDate>Thu, 23 Jun 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-gitignore-without-committing</guid><category>DevOps</category><description>Did you know that you can ignore files and folders in Git without committing a .gitignore file? Learn a trick for working with Git more effectively.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-gitignore-without-committing/images/banner.png"/></item><item><title>Git Line Staging &amp; Patch Editing</title><link>https://www.kenmuse.com/blog/git-line-staging-editor/</link><pubDate>Wed, 23 Feb 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">git-line-staging-editor</guid><category>DevOps</category><description>Tired of committing entire files in Git? Learn how to use the interactive staging feature to commit only the lines you want.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/git-line-staging-editor/images/banner.jpg"/></item><item><title>Using Git Line Staging to Commit Parts of Files</title><link>https://www.kenmuse.com/blog/git-line-staging/</link><pubDate>Fri, 18 Feb 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">git-line-staging</guid><category>DevOps</category><description>Tired of committing entire files in Git? Learn how to use the interactive staging feature to commit only the lines you want.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/git-line-staging/images/banner.jpg"/></item><item><title>Configuring Git's Text Editor</title><link>https://www.kenmuse.com/blog/configure-git-text-editor/</link><pubDate>Fri, 11 Feb 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">configure-git-text-editor</guid><category>DevOps</category><description>Learn how to configure Git to use your favorite text editor for commit messages, diffs, and merges.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/configure-git-text-editor/images/banner.jpg"/></item></channel></rss>