{"id":5397,"date":"2023-06-13T20:24:00","date_gmt":"2023-06-14T01:24:00","guid":{"rendered":"https:\/\/wpengine.com\/builders\/?p=5397"},"modified":"2023-06-29T13:34:13","modified_gmt":"2023-06-29T18:34:13","slug":"git-version-control-in-local","status":"publish","type":"post","link":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/","title":{"rendered":"Git Version Control (in Local)"},"content":{"rendered":"\n<p>Saving discrete code changes in version control with Git enables you to track the history of changes throughout the lifecycle of a project. Commit your changes (early and often) to Git and push them to a remote GitHub repository to deploy them to a targeted, specific environment (Development, Staging, or Production) and collaborate with anyone from anywhere. After you&#8217;ve shipped a new feature and want to get all the latest data from the production site, you can use Local&#8217;s Connect and sync what you want when you want.<\/p>\n\n\n\n<div class=\"wp-block-group has-polar-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-8c185ad2 wp-block-group-is-layout-constrained\" style=\"border-radius:8px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--40);padding-bottom:10px;padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"has-small-font-size\"><em>This post is part of a series that helps set up an end-to-end workflow for developing sites.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\" style=\"margin-top:12px;margin-right:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30);margin-left:var(--wp--preset--spacing--30)\">\n<li>Part One: <a href=\"https:\/\/wpengine.com\/builders\/local-wordpress-development-site\/\">Set Up a Local WordPress Development Site<\/a><\/li>\n\n\n\n<li>Part Two: <strong>Git Version Control (in Local)<\/strong><\/li>\n\n\n\n<li>Part Three: <a href=\"https:\/\/wpengine.com\/builders\/github-actions-for-deployments\/\">GitHub Action for Deployments<\/a><\/li>\n\n\n\n<li>Part Four: <a href=\"https:\/\/wpengine.com\/builders\/synchronize-production-data-with-local-connect\/\">Synchronize Production Data With Local Con<\/a><a href=\"https:\/\/wpengine.com\/builders\/synchronize-production-data\/\">nect<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<p>Notice how I put &#8220;(in Local)&#8221; in parenthesis? Local does not offer any integration with Git version control or GitHub, for that matter. However, our WordPress codebase exists because Local generates the WordPress core files for us and stores them on your computer. We want to focus on taking some of those files and directories and putting them under Git version control while intentionally ignoring the rest. This allows us to keep a discrete history of changes to our codebase.<\/p>\n\n\n\n<p>There are many ways to go about how to version control and organize your Git repository. Consider&nbsp;<a href=\"https:\/\/wpengine.com\/builders\/using-composer-manage-plugins-deploy\/\" target=\"_blank\" rel=\"noreferrer noopener\">using Composer to manage your WordPress plugins<\/a>&nbsp;and theme dependencies or utilize WP Engine&#8217;s&nbsp;<a href=\"https:\/\/wpengine.com\/smart-plugin-manager\/\" target=\"_blank\" rel=\"noreferrer noopener\">Smart Plugin Manager<\/a>&nbsp;service to auto-update your plugins and themes.<\/p>\n\n\n\n<p>It is also worth noting that you can rely on&nbsp;<a href=\"https:\/\/wpengine.com\/support\/wordpress-updates\/\" target=\"_blank\" rel=\"noreferrer noopener\">WP Engine&#8217;s WordPress core auto-updates<\/a>&nbsp;or test and manually trigger WordPress core updates yourself (either&nbsp;<a href=\"https:\/\/wpengine.com\/support\/wordpress-updates\/#Recommended\" target=\"_blank\" rel=\"noreferrer noopener\">in WP Engine&#8217;s portal<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/wpengine.com\/support\/wordpress-updates\/#Alternate\" target=\"_blank\" rel=\"noreferrer noopener\">in your site&#8217;s WP admin dashboard<\/a>), but we won&#8217;t cover including WordPress core files in our version control.<\/p>\n\n\n\n<p>Ultimately, it is a matter of what works best for you and your team, and WP Engine aims to offer the flexibility to meet most teams&#8217; workflow needs. Mostly, we encourage you to keep your Git repository lean because it&#8217;ll help keep your GitHub Action deployments shorter. The more plugins you add (and files) to your repository will increase the time it takes to run a deployment, which can create a counter-productive side-effect for your team.<\/p>\n\n\n\n<p>If you&#8217;ve been following along, you should have the Yoast SEO plugin and Frost theme installed on your Local site, which we will continue to work with for this end-to-end demonstration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tell-git-what-to-ignore\">Telling Git what to ignore<\/h2>\n\n\n\n<p>It is crucial to tell Git what you want to keep a history of and what you want to ignore. There is a particular file that Git uses to maintain this list of allowed and disallowed files and directories. It is called the .gitignore file.<\/p>\n\n\n\n<p>If you&#8217;ve been following along then your Local site&#8217;s <code>wp-content\/<\/code> directory likely looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Directory<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>wp-content\/plugins\/index.php<\/code><br><code>wp-content\/plugins\/wordpress-seo\/*<\/code><\/td><td>WordPress plugins directory with Yoast SEO plugin installed and the standard <code>index.php<\/code> file.<\/td><\/tr><tr><td><code>wp-content\/themes\/index.php<\/code><br><code>wp-content\/themes\/frost\/*<\/code><\/td><td>WordPress themes directory with the Frost theme installed and the standard <code>index.php<\/code> file.<\/td><\/tr><tr><td><code>wp-content\/upgrade<\/code><\/td><td>Where WordPress often stores backup info when running upgrades.<\/td><\/tr><tr><td><code>wp-content\/uploads<\/code><\/td><td>WordPress media library uploads directory.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">A standard fresh install of WordPress has these folders within the wp-content directory<\/figcaption><\/figure>\n\n\n\n<p>In our case, we <em>only<\/em> want to track the <code>wordpress-seo<\/code> plugin and <code>frost<\/code> theme directories with Git.<\/p>\n\n\n\n<p>So, let&#8217;s create a new file in VSCode (or your editor of choice) called <code>.gitignore<\/code> , add the following necessary rules to allow and disallow the pertinent files and folders, and save the <code>.gitignore<\/code> within the <code>wp-content\/<\/code> directory, which is the root of our Git repository.<\/p>\n\n\n\n<p>Below is the complete code for our <code>.gitignore<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-center has-polar-background-color has-background has-small-font-size\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><code>wp-content\/.gitignore<\/code> (<a href=\"https:\/\/gist.github.com\/colorful-tones\/9adeab19373a0b3693795f199b188c8c\" target=\"_blank\" rel=\"noreferrer noopener\">full source<\/a>)<\/p>\n\n\n<pre class=\"wp-block-code\" style=\"margin-top:0;margin-bottom:0\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">#----------------------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># This Git ignore should be located<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># in your WordPress install's wp-content\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># directory.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#----------------------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WordPress general<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/index.php<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WordPress themes<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/themes\/*<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># DO NOT ignore these themes...<\/span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-string\">!\/themes\/frost<\/span>\n<\/span><\/mark><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WordPress plugins<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/plugins\/*<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># DO NOT ignore these plugins...<\/span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-string\">!\/plugins\/wordpress-seo<\/span>\n<\/span><\/mark><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WP MU plugins: these are<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># managed by the platform.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/mu-plugins\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WP uploads directory<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/uploads\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># WP upgrade files<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/upgrade\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># OS-specific files<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">.DS_Store<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">.Trashes<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">Thumbs.db<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># Composer<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/vendor<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">.env<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">.env.*<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">!.env.example<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># Smart Plugin Manager<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">\/.logs\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">autoupdater_maintenance_mode_enabled.tmp<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># large\/disallowed file types<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># a CDN should be used for these<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.hqx<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.bin<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.exe<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.dll<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.deb<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.dmg<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.iso<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.img<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.msi<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.msp<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.msm<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mid<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.midi<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.kar<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mp3<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.ogg<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.m4a<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.ra<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.3gpp<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.3gp<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mp4<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mpeg<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mpg<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mov<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.webm<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.flv<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.m4v<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.mng<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.asx<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.asf<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.wmv<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.avi<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">*.log<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># Build tools<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">node_modules<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># Other<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">#---------------------------<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-string\">.gitattributes<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<p>Note the highlighted lines above (lines 18 and 26). These show the precise lines where we&#8217;re telling Git <strong><em>not to&nbsp;ignore<\/em><\/strong>&nbsp;the Yoast SEO plugin, Frost theme, and <em>everything else ignored<\/em> by version control.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"initialize-git-in-local\">Initialize Git (in Local)<\/h2>\n\n\n\n<p>Now that we have a proper <code>.gitignore<\/code> file in our <code>wp-content\/<\/code> directory. We have to initialize Git. Right now, Git does not exist, nor is Git aware that this folder is intended to be a repository. So, let&#8217;s initialize Git. (Note: We won&#8217;t cover how to install Git on your computer, but here is&nbsp;<a href=\"https:\/\/github.com\/git-guides\/install-git\" target=\"_blank\" rel=\"noreferrer noopener\">a handy guide<\/a>.)<\/p>\n\n\n\n<p>There are many options for initializing Git, and we&#8217;ll cover a few.<\/p>\n\n\n\n<div class=\"wp-block-group has-base-color has-text-color has-background has-link-color wp-elements-1e5642acd0c4764eac9bf4f34d78460d has-global-padding is-layout-constrained wp-container-core-group-is-layout-9b866ece wp-block-group-is-layout-constrained\" style=\"border-radius:12px;background-color:#267048;margin-bottom:var(--wp--preset--spacing--30);padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-group alignwide is-content-justification-left is-layout-flex wp-container-core-group-is-layout-75880670 wp-block-group-is-layout-flex\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-outermost-icon-block\"><div class=\"icon-container\" style=\"width:140px\"><svg fill=\"none\" viewBox=\"0 0 140 54\" aria-label=\"Local logo\"><path fill=\"currentColor\" d=\"M102.778 36.922c2.222 0 4.291-.852 6.026-2.465.091-.061.183-.183.274-.275.244-.273.213-.578.031-.882 0 0-.579-.944-.731-1.157-.152-.213-.274-.304-.456-.334-.213-.03-.427.09-.67.304-1.4 1.187-2.861 1.796-4.352 1.796-4.018 0-5.844-3.805-5.844-7.335 0-3.5 1.796-7.03 5.844-7.03 1.369 0 2.8.517 4.139 1.521.335.244.7.213.883-.091l.76-1.278c.244-.427.183-.7-.091-.974-.061-.061-.152-.152-.243-.213a8.77 8.77 0 0 0-5.57-1.948c-2.283 0-4.291.822-5.874 2.404-1.887 1.887-2.891 4.626-2.891 7.7 0 2.952.852 5.478 2.343 7.274 1.522 1.857 3.774 2.983 6.422 2.983ZM83.026 16.287c-5.083 0-8.887 4.352-8.887 10.135 0 5.934 3.804 10.408 8.887 10.408 5.052 0 8.856-4.474 8.856-10.408 0-5.753-3.804-10.135-8.856-10.135Zm0 17.47c-3.257 0-5.6-3.105-5.6-7.335 0-4.14 2.313-7.061 5.6-7.061 3.287 0 5.6 2.921 5.6 7.06 0 4.353-2.313 7.336-5.6 7.336ZM72.86 33.604h-7.212V17.23a.61.61 0 0 0-.609-.608h-1.978a.61.61 0 0 0-.609.608v18.718a.61.61 0 0 0 .609.608h9.8a.61.61 0 0 0 .608-.608v-1.735a.61.61 0 0 0-.608-.609ZM139.148 33.604h-7.213V17.23a.61.61 0 0 0-.609-.608h-1.978a.61.61 0 0 0-.609.608v18.718a.61.61 0 0 0 .609.608h9.8a.61.61 0 0 0 .608-.608v-1.735a.61.61 0 0 0-.608-.609ZM126.243 35.765l-6.087-18.687c-.091-.243-.304-.426-.578-.426h-2.039c-.244 0-.426.152-.517.365l-6.179 18.748a.6.6 0 0 0 .579.791h1.978c.274 0 .487-.182.578-.426l1.644-5.143h5.904l1.674 5.143c.091.244.304.426.578.426h1.857c.456 0 .73-.395.608-.79Zm-9.891-7.608 1.826-5.722c.152-.457.304-1.066.426-1.583.122.548.274 1.126.426 1.583l1.826 5.722h-4.504ZM25.326 11.052V2.247c0-.605-.394-1.15-.939-1.392-.544-.242-1.21-.09-1.633.333L3.147 20.795C1.059 22.883.06 24.91.03 27.028c0 2.118.969 4.115 3.026 6.172l19.698 19.698a1.42 1.42 0 0 0 1.059.454c.181 0 .393-.03.575-.182.574-.242.938-.786.938-1.391v-8.896c0-.393-.182-.787-.454-1.06L10.015 26.969 24.872 12.11a1.42 1.42 0 0 0 .454-1.059ZM22.3 43.55v4.629L7.958 33.836c-.06-.09-.121-.182-.212-.272-.454-.454-1.816-1.816.212-4.357L22.3 43.549Zm0-33.072L6.596 26.181c-1.21 1.21-2.027 2.48-2.45 3.721-.757-.998-1.12-1.936-1.12-2.844.03-1.27.756-2.632 2.239-4.115L22.3 5.908v4.57Z\"><\/path><path fill=\"currentColor\" d=\"M14.221 26.998v.12c0 .636.514 1.15 1.15 1.15h22.481a1.15 1.15 0 0 0 1.15-1.15v-.12a1.15 1.15 0 0 0-1.15-1.15H15.371a1.15 1.15 0 0 0-1.15 1.15ZM18.548 22.61v.122c0 .635.514 1.15 1.15 1.15h13.797a1.15 1.15 0 0 0 1.15-1.15v-.122a1.15 1.15 0 0 0-1.15-1.15H19.698a1.15 1.15 0 0 0-1.15 1.15ZM29.229 19.464a1.15 1.15 0 0 0 1.15-1.15v-.121a1.15 1.15 0 0 0-1.15-1.15h-5.477a1.15 1.15 0 0 0-1.15 1.15v.12c0 .636.515 1.15 1.15 1.15h5.477ZM23.752 37.164h5.477a1.15 1.15 0 0 0 1.15-1.15v-.12a1.15 1.15 0 0 0-1.15-1.15h-5.477a1.15 1.15 0 0 0-1.15 1.15v.12c0 .636.515 1.15 1.15 1.15ZM19.698 32.716h13.797a1.15 1.15 0 0 0 1.15-1.15v-.12a1.15 1.15 0 0 0-1.15-1.15H19.698a1.15 1.15 0 0 0-1.15 1.15v.12c0 .636.514 1.15 1.15 1.15Z\"><\/path><path fill=\"currentColor\" d=\"M50.379 20.916 30.68 1.218a1.486 1.486 0 0 0-1.634-.332 1.509 1.509 0 0 0-.938 1.391v8.926c0 .394.182.787.454 1.06l14.856 14.856-14.856 14.856a1.42 1.42 0 0 0-.454 1.06v8.804c0 .605.363 1.15.938 1.392.182.09.393.121.575.121.393 0 .756-.151 1.059-.424l19.607-19.606c2.088-2.088 3.086-4.115 3.116-6.234 0-2.117-.968-4.114-3.025-6.172ZM31.135 10.538v-4.63L45.477 20.25c.06.091.12.182.212.273.453.454 1.815 1.815-.212 4.357L31.135 10.538Zm17.004 20.605L31.105 48.178v-4.539l15.703-15.734c1.21-1.21 2.028-2.48 2.451-3.721.757.998 1.12 1.936 1.12 2.844-.03 1.27-.757 2.632-2.24 4.115Z\"><\/path><\/svg><\/div><\/div>\n\n\n\n<p class=\"has-small-font-size wp-container-content-9cfa9a5a\" style=\"line-height:1.5\">The #1 local WordPress <br>development tool<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-nowrap is-layout-flex wp-container-core-buttons-is-layout-b35f32a3 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-outline-base\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/wpeng.in\/local-builders\/\" style=\"border-radius:99px;padding-top:10px;padding-right:24px;padding-bottom:10px;padding-left:24px\" target=\"_blank\" rel=\"noreferrer noopener\">Download Free \u2192<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"github-desktop-initialize\">GitHub Desktop (free)<\/h3>\n\n\n\n<p>A typical application for setting up Git version control is GitHub&#8217;s own&nbsp;<a href=\"https:\/\/desktop.github.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Desktop<\/a>, which allows you to drag and drop a folder into its application, choose &#8216;create a repository,` and give it a name. You can even select a Git Ignore file to jump-start your repo&#8217;s configuration, but we already have one.<\/p>\n\n\n\n<p>So, go ahead and drag the <code>wp-content\/<\/code> folder on GitHub Desktop, choose &#8216;Create a repository,&#8217; give the repository a name, and click the &#8216;Create Repository&#8217; button. This will even give us an initial commit, which is handy.<\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/GitHub-Desktop-add-repo-rev.gif\" alt=\"Demonstration of adding a folder in GitHub Desktop\" class=\"wp-image-5322\"\/><figcaption class=\"wp-element-caption\">Demonstration of adding a folder in GitHub Desktop<\/figcaption><\/figure>\n\n\n\n<p>How do you find your Local site&#8217;s <code>wp-content\/<\/code> folder? We can use Local&#8217;s &#8216;<em>Go to site folder<\/em>&#8216; to get to where Local installs the WordPress site, but we will still have to navigate further into <code>app\/public\/wp-content\/<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/Local-go-to-site-folder-compressed.gif\" alt=\"Demonstration of using the Go To Site Folder button in Local\" class=\"wp-image-5319\"\/><figcaption class=\"wp-element-caption\">Demonstration of using the Go To Site Folder button in Local<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cli-initialize-git\">Command-line interface (CLI)<\/h3>\n\n\n\n<p>If you&#8217;re a regular CLI user, you likely already know how to <code>cd<\/code> to the <code>wp-content\/<\/code> directory and run <code>git init<\/code>.<\/p>\n\n\n\n<p>If you&#8217;re still new to CLI, here is another way to switch to the <code>wp-content\/<\/code> directory. Open up Terminal, iTerm, or Hyper, and type <code>cd <\/code> (with a space after &#8220;cd&#8221;) and then drag and drop the folder into the CLI app and hit &#8216;Return.&#8217; This will drop you right into the corresponding directory.<\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/git-init-cli.gif\" alt=\"Demonstration of drag and dropping a Finder directory into iTerm app and running git init\" class=\"wp-image-5320\"\/><figcaption class=\"wp-element-caption\">Demonstration of dragging and dropping a Finder directory into iTerm app and running `git init`<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"publishing-git-to-github\">Publishing Git to GitHub<\/h2>\n\n\n\n<p>At this point, you should have Git initialized in your Local site&#8217;s <code>wp-content\/<\/code> directory and tracking changes to only the Frost theme and the Yoast SEO plugin. That is fine and dandy, but we want our Git history available to other developers and clients (optional). We want to publish our repository to GitHub so you can reap the rewards of a centralized codebase and version control.<\/p>\n\n\n\n<p>Again, we&#8217;ll show you how to do this with CLI and GitHub Desktop.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"publishing-with-github-desktop\">Publishing with GitHub Desktop<\/h3>\n\n\n\n<p>GitHub Desktop makes it pretty easy to publish your changes if you already have a GitHub account set up. If you don&#8217;t, then you better&nbsp;<a href=\"https:\/\/github.com\/signup\" target=\"_blank\" rel=\"noreferrer noopener\">get started<\/a>!<\/p>\n\n\n\n<p>Just click the &#8216;Publish repository&#8217; in the top-right, which should prompt you to sign in to GitHub.com by opening a browser and completing the process. Once logged in, give your GitHub repository a name and click &#8216;Publish.&#8217;<\/p>\n\n\n\n<figure class=\"wp-block-video alignwide\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" autoplay loop muted preload=\"auto\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/GitHub-Desktop-add-and-publish-repo-optimized.mp4\" playsinline><\/video><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"publishing-with-cli\">Publishing with CLI<\/h3>\n\n\n\n<p>There are two ways to go about this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.github.com\/en\/migrations\/importing-source-code\/using-the-command-line-to-import-source-code\/adding-locally-hosted-code-to-github#adding-a-local-repository-to-github-with-github-cli\">Adding a local repository to GitHub with GitHub CLI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.github.com\/en\/migrations\/importing-source-code\/using-the-command-line-to-import-source-code\/adding-locally-hosted-code-to-github#adding-a-local-repository-to-github-using-git\">Adding a local repository to GitHub using Git<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s next?<\/h2>\n\n\n\n<p>Let&#8217;s explore adding <a href=\"https:\/\/github.com\/marketplace\/actions\/deploy-wordpress-to-wp-engine\">WP Engine&#8217;s GitHub Actions<\/a> to trigger branch-based deployments to targeted environments with our existing demonstration codebase.<\/p>\n\n\n\n<div class=\"wp-block-group has-base-color has-lapis-background-color has-text-color has-background has-link-color wp-elements-4859cd0e3519da61f2297847b69e1270 is-nowrap is-layout-flex wp-container-core-group-is-layout-89a94f6a wp-block-group-is-layout-flex\" style=\"border-radius:8px\">\n<p class=\"has-medium-large-font-size\"><strong><a href=\"https:\/\/wpengine.com\/builders\/github-actions-for-deployments\/\">Next up: GitHub Actions for Deployment<\/a><\/strong><\/p>\n\n\n\n<div class=\"wp-block-outermost-icon-block\"><a class=\"icon-container has-icon-color has-base-color\" href=\"https:\/\/wpengine.com\/builders\/github-actions-for-deployments\/\" style=\"color:#fff;width:26px\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z\"><\/path><\/svg><\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Saving discrete code changes in version control with Git enables you to track the history of changes throughout the lifecycle of a project. Commit your changes (early and often) to [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":5309,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_EventAllDay":false,"_EventTimezone":"","_EventStartDate":"","_EventEndDate":"","_EventStartDateUTC":"","_EventEndDateUTC":"","_EventShowMap":false,"_EventShowMapLink":false,"_EventURL":"","_EventCost":"","_EventCostDescription":"","_EventCurrencySymbol":"","_EventCurrencyCode":"","_EventCurrencyPosition":"","_EventDateTimeSeparator":"","_EventTimeRangeSeparator":"","_EventOrganizerID":[],"_EventVenueID":[],"_OrganizerEmail":"","_OrganizerPhone":"","_OrganizerWebsite":"","_VenueAddress":"","_VenueCity":"","_VenueCountry":"","_VenueProvince":"","_VenueState":"","_VenueZip":"","_VenuePhone":"","_VenueURL":"","_VenueStateProvince":"","_VenueLat":"","_VenueLng":"","_VenueShowMap":false,"_VenueShowMapLink":false,"footnotes":""},"categories":[1],"tags":[12,11,33,34,35],"class_list":["post-5397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-git","tag-github","tag-local","tag-version-control","tag-workflow"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Git Version Control (in Local) - Builders<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Version Control (in Local) - Builders\" \/>\n<meta property=\"og:description\" content=\"Saving discrete code changes in version control with Git enables you to track the history of changes throughout the lifecycle of a project. Commit your changes (early and often) to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/\" \/>\n<meta property=\"og:site_name\" content=\"Builders\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-14T01:24:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-29T18:34:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/git-version-control-local-og.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Damon Cook\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/git-version-control-local-og.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@dcook\" \/>\n<meta name=\"twitter:site\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damon Cook\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/\"},\"author\":{\"name\":\"Damon Cook\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/9d8d20c8a321b90faceae588fcf6d30d\"},\"headline\":\"Git Version Control (in Local)\",\"datePublished\":\"2023-06-14T01:24:00+00:00\",\"dateModified\":\"2023-06-29T18:34:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/\"},\"wordCount\":1182,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Local-GitHub-workflow.png\",\"keywords\":[\"Git\",\"GitHub\",\"Local\",\"version control\",\"workflow\"],\"articleSection\":[\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/\",\"name\":\"Git Version Control (in Local) - Builders\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Local-GitHub-workflow.png\",\"datePublished\":\"2023-06-14T01:24:00+00:00\",\"dateModified\":\"2023-06-29T18:34:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Local-GitHub-workflow.png\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Local-GitHub-workflow.png\",\"width\":1920,\"height\":1080,\"caption\":\"diagram demonstrating a workflow for promoting code to production on WP Engine\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/git-version-control-in-local\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git Version Control (in Local)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"name\":\"Builders\",\"description\":\"Reimagining the way we build with WordPress.\",\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\",\"name\":\"WP Engine\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"width\":348,\"height\":68,\"caption\":\"WP Engine\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/wpebuilders\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCh1WuL54XFb9ZI6m6goFv1g\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/9d8d20c8a321b90faceae588fcf6d30d\",\"name\":\"Damon Cook\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g\",\"caption\":\"Damon Cook\"},\"description\":\"Damon Cook is a Developer Advocate at WP Engine. Previously, he navigated the WordPress agency land for a decade. He is a purveyor and discoverer of musical frisson. He can be found in the realms of WordPress Slack, WooCommerce Slack, and Twitter.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/dcook\"],\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/author\\\/damon-cook\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Git Version Control (in Local) - Builders","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/","og_locale":"en_US","og_type":"article","og_title":"Git Version Control (in Local) - Builders","og_description":"Saving discrete code changes in version control with Git enables you to track the history of changes throughout the lifecycle of a project. Commit your changes (early and often) to [&hellip;]","og_url":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/","og_site_name":"Builders","article_published_time":"2023-06-14T01:24:00+00:00","article_modified_time":"2023-06-29T18:34:13+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/git-version-control-local-og.jpg","type":"image\/jpeg"}],"author":"Damon Cook","twitter_card":"summary_large_image","twitter_image":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/git-version-control-local-og.jpg","twitter_creator":"@dcook","twitter_site":"@wpebuilders","twitter_misc":{"Written by":"Damon Cook","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#article","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/"},"author":{"name":"Damon Cook","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/9d8d20c8a321b90faceae588fcf6d30d"},"headline":"Git Version Control (in Local)","datePublished":"2023-06-14T01:24:00+00:00","dateModified":"2023-06-29T18:34:13+00:00","mainEntityOfPage":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/"},"wordCount":1182,"commentCount":0,"publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"image":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/Local-GitHub-workflow.png","keywords":["Git","GitHub","Local","version control","workflow"],"articleSection":["WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/","url":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/","name":"Git Version Control (in Local) - Builders","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#primaryimage"},"image":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/Local-GitHub-workflow.png","datePublished":"2023-06-14T01:24:00+00:00","dateModified":"2023-06-29T18:34:13+00:00","breadcrumb":{"@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/builders\/git-version-control-in-local\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#primaryimage","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/Local-GitHub-workflow.png","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2023\/06\/Local-GitHub-workflow.png","width":1920,"height":1080,"caption":"diagram demonstrating a workflow for promoting code to production on WP Engine"},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/builders\/git-version-control-in-local\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/builders\/"},{"@type":"ListItem","position":2,"name":"Git Version Control (in Local)"}]},{"@type":"WebSite","@id":"https:\/\/wpengine.com\/builders\/#website","url":"https:\/\/wpengine.com\/builders\/","name":"Builders","description":"Reimagining the way we build with WordPress.","publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpengine.com\/builders\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wpengine.com\/builders\/#organization","name":"WP Engine","url":"https:\/\/wpengine.com\/builders\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","width":348,"height":68,"caption":"WP Engine"},"image":{"@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/wpebuilders","https:\/\/www.youtube.com\/channel\/UCh1WuL54XFb9ZI6m6goFv1g"]},{"@type":"Person","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/9d8d20c8a321b90faceae588fcf6d30d","name":"Damon Cook","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/18d75285d6803fab88b7f45601bb68cbac7c3956347217c06a0291e27dc65f6a?s=96&d=mm&r=g","caption":"Damon Cook"},"description":"Damon Cook is a Developer Advocate at WP Engine. Previously, he navigated the WordPress agency land for a decade. He is a purveyor and discoverer of musical frisson. He can be found in the realms of WordPress Slack, WooCommerce Slack, and Twitter.","sameAs":["https:\/\/x.com\/dcook"],"url":"https:\/\/wpengine.com\/builders\/author\/damon-cook\/"}]}},"_links":{"self":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/5397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/comments?post=5397"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/5397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media\/5309"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media?parent=5397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/categories?post=5397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/tags?post=5397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}