{"id":1933,"date":"2024-09-22T12:10:29","date_gmt":"2024-09-22T19:10:29","guid":{"rendered":"https:\/\/felix-arntz.me\/?p=1933"},"modified":"2025-02-11T08:11:08","modified_gmt":"2025-02-11T16:11:08","slug":"my-wordpress-core-contribution-workflow","status":"publish","type":"post","link":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/","title":{"rendered":"My WordPress Core Contribution Workflow"},"content":{"rendered":"\n<p>During an informal meetup between the WordPress Core committers attending WordCamp US 2024, one of the topics we discussed was how each of us was handling commits. Given that WordPress Core uses svn and Trac for its source of truth but git and GitHub are encouraged for contributing, it can be a bit of a hassle to synchronize changes when it comes to committing code to WordPress Core.<\/p>\n\n\n\n<p>Fortunately, this is only relevant for the folks that <em>commit<\/em> code, i.e. nothing that a new contributor needs to worry about. Yet, there&#8217;s a good number of committers, and new ones are added regularly, so we thought it would be good to document our workflows. There&#8217;s no &#8220;official&#8221; documentation about this, simply because there&#8217;s no universally recommended approach. Many committers have come up with their own solutions throughout the years, so we decided it would be a great idea if each committer documented their approach, so that we would have a number of solutions to compare and for newer committers to review and choose from.<\/p>\n\n\n\n<p>This brief article outlines my personal workflow for committing to WordPress Core.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Here&#8217;s a (non-exhaustive) list of other committers&#8217; posts on the topic that I&#8217;m aware of so far:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/aaron.jorb.in\/my-core-contribution-workflow\/\">Aaron Jorbin&#8217;s commit workflow<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/joemcgill.net\/2024\/09\/how-i-commit-to-wordpress\/\">Joe McGill&#8217;s commit workflow<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Managing the git and svn checkouts in the same directory<\/h2>\n\n\n\n<p>Before I outline my workflow, I need to give credit to my friend and colleague <a href=\"https:\/\/weston.ruter.net\/\">Weston Ruter<\/a>. He is the one that came up with more or less the entire solution that I&#8217;m using and describing in this post, and it&#8217;s been working seamlessly for me for many years now.<\/p>\n\n\n\n<p>I find it tedious to synchronize changes from the git checkout of WordPress with the svn checkout of WordPress in another location. So what&#8217;s the solution for that? Manage the two in the same directory so that synchronization happens automatically! There are definitely some quirks to figure out when using the same directory, but fortunately Weston has already done all of that. He created a Bash script called <code>git-svn-up<\/code> that handles the synchronization in a single command.<\/p>\n\n\n\n<p>To refresh my local checkouts from both VCS sources, I simply run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git svn-up<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>I can also easily checkout a specific branch from both VCS sources, for example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git svn-up 5.0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Having both checkouts in the same place makes it trivial to checkout the code from a GitHub pull request and then having it readily available to commit to WordPress Core SVN. Once I tried this approach Weston shared with me, it was a game changer in ease of use. Honestly, at this point I don&#8217;t mind it at all anymore that WordPress Core uses SVN. It doesn&#8217;t get in the way anymore when using this approach.<\/p>\n\n\n\n<p>Let&#8217;s look at how we can set up our environment to use this workflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Initial setup<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Setting up the command<\/h4>\n\n\n\n<p>You can download the <a href=\"https:\/\/github.com\/westonruter\/svn-git-up\">Bash script from this repository<\/a>. You could put it into a directory in your <code>$PATH<\/code> as an executable file <code>git-svn-up<\/code>. That way, you can easily call it from anywhere.<\/p>\n\n\n\n<p>If you like, you could additionally create a <code>git<\/code> alias for it. That&#8217;s really just a nice to have, but I find it convenient to call it as if it was a subcommand of <code>git<\/code>, i.e. <code>git svn-up<\/code>. To do so, you need to edit your <code>~\/.gitconfig<\/code> file to configure an alias, e.g. something like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&#91;alias]\n\tsvn-up = <span class=\"hljs-string\">\"!$DIR_WHERE_YOU_PUT_THE_FILE\/git-svn-up $1\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>That&#8217;s all for setting up the command.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Setting up the development checkout<\/h4>\n\n\n\n<p>To use the command, check out the git and svn repositories of WordPress into the same directory. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git <span class=\"hljs-built_in\">clone<\/span> git@github.com:WordPress\/wordpress-develop.git wordpress-develop\nsvn co https:\/\/develop.svn.wordpress.org\/trunk\/ wordpress-develop<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Now, you can use that directory containing both checkouts to contribute to WordPress Core.<\/p>\n\n\n\n<p>A good idea might be to already add your own WordPress Core GitHub fork as a remote, since pull requests for WordPress Core should always come from a fork. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git remote add felixarntz git@github.com:felixarntz\/wordpress-develop.git<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You can also add a safeguard so that you don&#8217;t accidentally push code to the actual WordPress Core repository. This is discouraged anyway, and pull requests in that repository will be automatically closed. You can run this command to ensure that even if you forget to specify a destination when using <code>git push<\/code>, it will still go to your fork:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git remote <span class=\"hljs-built_in\">set<\/span>-url --push origin git@github.com:felixarntz\/wordpress-develop.git<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>So now let&#8217;s take a brief look at how I use this setup.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Workflow<\/h3>\n\n\n\n<p>Whenever I start working on a code change, I refresh my local checkout via <code>git svn-up<\/code>. Then, I either create a new branch (if I intend to start writing a patch myself) or check out someone else&#8217;s pull request (if I intend to locally review, test, iterate on, or commit their patch).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Working on my own patches<\/h4>\n\n\n\n<p>Working on my own patches and pull requests is straightforward. I simply create or move to the relevant branch, for example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git checkout -b fix\/12345-ticket-bug<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Once I have something that&#8217;s ready to push, I push it to my own fork via:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git push felixarntz<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Working on someone else&#8217;s patches<\/h4>\n\n\n\n<p>Usually as a committer, you review, test, or eventually commit someone else&#8217;s code. In those cases, my own workflow begins by checking out the code from the other contributor&#8217;s pull request. Let&#8217;s say for example that I want to review a pull request from Weston Ruter, in a branch called <code>fix\/weston-test<\/code> on his own fork. His WordPress fork lives at <code>https:\/\/github.com\/westonruter\/wordpress-develop<\/code>. So I can check out that code by adding his fork as a remote, fetching its code, and then moving to the relevant branch:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git remote add westonruter git@github.com:westonruter\/wordpress-develop.git\ngit fetch westonruter\ngit checkout fix\/weston-test<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Once I have reviewed the code changes, I could either provide feedback on the pull request, or iterate on the pull request myself, or commit it to WordPress Core.<\/p>\n\n\n\n<p>To iterate yourself, you would simply modify the code, and once you&#8217;re ready to push it, you&#8217;d push it back to the contributor&#8217;s fork &#8211; in my example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">git push westonruter<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To commit the code from the git branch to WordPress Core, thanks to the Bash script I don&#8217;t have to synchronize or copy the code somewhere else. I can simply remain in the same directory.<\/p>\n\n\n\n<p>A basic sanity check I usually do is to make sure that the code changes recognized by SVN align with the code changes on the GitHub pull request by using:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">git status\nsvn stat<\/code><\/span><\/pre>\n\n\n<p>The <code>git status<\/code> call shouldn&#8217;t show any changes since you&#8217;re probably in the latest checkout of the pull request branch. But on SVN you should see those changes since of course they haven&#8217;t been added to WordPress Core just yet.<\/p>\n\n\n\n<p>Once you&#8217;re confident about the change to commit it, all that&#8217;s left to do is to write a commit message and:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">svn ci<\/code><\/span><\/pre>\n\n\n<p>And that wraps up this post about my workflow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Questions?<\/h2>\n\n\n\n<p>If anything in my explanations is unclear or you have additional suggestions, please let me know in the comments.<\/p>\n\n\n\n<p>If you&#8217;re a WordPress Core committer too, I&#8217;d love to see you write a post on your workflow as well, as all of us are curious to see how each other is doing it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>During an informal meetup between the WordPress Core committers attending WordCamp US 2024, one of the topics we discussed was how each of us was handling commits. Given that WordPress Core uses svn and Trac for its source of truth but git and GitHub are encouraged for contributing, it can be a bit of a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1935,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[72,97],"tags":[],"class_list":["post-1933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>My WordPress Core Contribution Workflow - felix-arntz.me<\/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:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"My WordPress Core Contribution Workflow - felix-arntz.me\" \/>\n<meta property=\"og:description\" content=\"During an informal meetup between the WordPress Core committers attending WordCamp US 2024, one of the topics we discussed was how each of us was handling commits. Given that WordPress Core uses svn and Trac for its source of truth but git and GitHub are encouraged for contributing, it can be a bit of a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\" \/>\n<meta property=\"og:site_name\" content=\"felix-arntz.me\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-22T19:10:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-11T16:11:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1576\" \/>\n\t<meta property=\"og:image:height\" content=\"912\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Felix\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:site\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felix\" \/>\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:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\"},\"author\":{\"name\":\"Felix\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"headline\":\"My WordPress Core Contribution Workflow\",\"datePublished\":\"2024-09-22T19:10:29+00:00\",\"dateModified\":\"2025-02-11T16:11:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\"},\"wordCount\":1163,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png\",\"articleSection\":[\"Open-Source\",\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\",\"url\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\",\"name\":\"My WordPress Core Contribution Workflow - felix-arntz.me\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png\",\"datePublished\":\"2024-09-22T19:10:29+00:00\",\"dateModified\":\"2025-02-11T16:11:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png\",\"width\":1576,\"height\":912,\"caption\":\"A command line interface showing the \\\"git svn-up\\\" command\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/felix-arntz.me\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open-Source\",\"item\":\"https:\/\/felix-arntz.me\/blog\/category\/open-source\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"My WordPress Core Contribution Workflow\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/felix-arntz.me\/#website\",\"url\":\"https:\/\/felix-arntz.me\/\",\"name\":\"felix-arntz.me\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/felix-arntz.me\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\",\"name\":\"Felix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Felix\"},\"logo\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\"},\"description\":\"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.\",\"sameAs\":[\"https:\/\/x.com\/felixarntz\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"My WordPress Core Contribution Workflow - felix-arntz.me","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:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/","og_locale":"en_US","og_type":"article","og_title":"My WordPress Core Contribution Workflow - felix-arntz.me","og_description":"During an informal meetup between the WordPress Core committers attending WordCamp US 2024, one of the topics we discussed was how each of us was handling commits. Given that WordPress Core uses svn and Trac for its source of truth but git and GitHub are encouraged for contributing, it can be a bit of a [&hellip;]","og_url":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/","og_site_name":"felix-arntz.me","article_published_time":"2024-09-22T19:10:29+00:00","article_modified_time":"2025-02-11T16:11:08+00:00","og_image":[{"width":1576,"height":912,"url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","type":"image\/png"}],"author":"Felix","twitter_card":"summary_large_image","twitter_creator":"@felixarntz","twitter_site":"@felixarntz","twitter_misc":{"Written by":"Felix","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#article","isPartOf":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/"},"author":{"name":"Felix","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"headline":"My WordPress Core Contribution Workflow","datePublished":"2024-09-22T19:10:29+00:00","dateModified":"2025-02-11T16:11:08+00:00","mainEntityOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/"},"wordCount":1163,"commentCount":2,"publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","articleSection":["Open-Source","WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/","url":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/","name":"My WordPress Core Contribution Workflow - felix-arntz.me","isPartOf":{"@id":"https:\/\/felix-arntz.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","datePublished":"2024-09-22T19:10:29+00:00","dateModified":"2025-02-11T16:11:08+00:00","breadcrumb":{"@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#primaryimage","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","width":1576,"height":912,"caption":"A command line interface showing the \"git svn-up\" command"},{"@type":"BreadcrumbList","@id":"https:\/\/felix-arntz.me\/blog\/my-wordpress-core-contribution-workflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/felix-arntz.me\/"},{"@type":"ListItem","position":2,"name":"Open-Source","item":"https:\/\/felix-arntz.me\/blog\/category\/open-source\/"},{"@type":"ListItem","position":3,"name":"My WordPress Core Contribution Workflow"}]},{"@type":"WebSite","@id":"https:\/\/felix-arntz.me\/#website","url":"https:\/\/felix-arntz.me\/","name":"felix-arntz.me","description":"","publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felix-arntz.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55","name":"Felix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","width":512,"height":512,"caption":"Felix"},"logo":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/"},"description":"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.","sameAs":["https:\/\/x.com\/felixarntz"]}]}},"jetpack_featured_media_url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/09\/git-svn-up.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/comments?post=1933"}],"version-history":[{"count":3,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1933\/revisions"}],"predecessor-version":[{"id":1940,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1933\/revisions\/1940"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media\/1935"}],"wp:attachment":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media?parent=1933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/categories?post=1933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/tags?post=1933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}