<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Quentin Lerebours</title>
    <description>The latest articles on Forem by Quentin Lerebours (@qlerebours_).</description>
    <link>https://forem.com/qlerebours_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F845525%2Fa414c6e0-225d-40c4-aee0-74a4ea5e04f1.jpg</url>
      <title>Forem: Quentin Lerebours</title>
      <link>https://forem.com/qlerebours_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/qlerebours_"/>
    <language>en</language>
    <item>
      <title>Leverage git worktree to parallelize work with Codex, Claude Code, etc.</title>
      <dc:creator>Quentin Lerebours</dc:creator>
      <pubDate>Wed, 18 Feb 2026 11:31:44 +0000</pubDate>
      <link>https://forem.com/qlerebours_/leverage-git-worktree-to-parallelize-work-with-codex-claude-code-etc-1np1</link>
      <guid>https://forem.com/qlerebours_/leverage-git-worktree-to-parallelize-work-with-codex-claude-code-etc-1np1</guid>
      <description>&lt;p&gt;Over the past two weeks, I’ve noticed a huge shift in how developers work.&lt;br&gt;
We’re becoming orchestrators, guiding code assistants like Codex or Claude Code to build features and fix bugs.&lt;/p&gt;

&lt;p&gt;If you haven’t seen it yet, it’s even possible to work on several features in parallel,&lt;br&gt;
on their own branches, without cloning the project multiple times.&lt;/p&gt;

&lt;p&gt;Behind that workflow is a Git tool that’s often overlooked: &lt;strong&gt;&lt;code&gt;git worktree&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ll walk through how this feature works so you can efficiently parallelize multiple tasks on the same project.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Understanding &lt;code&gt;git worktree&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;In a traditional Git repository, you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the source code in a working directory: &lt;code&gt;/Users/qlerebours/Projects/traveledmap&lt;/code&gt; for example.&lt;/li&gt;
&lt;li&gt;a checked-out branch: &lt;code&gt;feat/my-main-feature&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;.git&lt;/code&gt; folder that contains the project history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching branches changes the files in your current directory, so how do you take advantage of tools like Codex and&lt;br&gt;
Claude Code to work on multiple features in parallel?&lt;/p&gt;

&lt;p&gt;One solution we can rule out is cloning the project into a second folder. The reason is simple:&lt;br&gt;
cloning twice means two &lt;code&gt;.git&lt;/code&gt; folders (which can be large), and the whole point of &lt;code&gt;git worktree&lt;/code&gt; is to replace manual&lt;br&gt;
clones.&lt;/p&gt;
&lt;h3&gt;
  
  
  What &lt;code&gt;git worktree&lt;/code&gt; does
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git worktree&lt;/code&gt; lets you attach &lt;strong&gt;multiple working directories&lt;/strong&gt; to the same Git repository while keeping &lt;strong&gt;a single&lt;br&gt;
shared history&lt;/strong&gt; (&lt;code&gt;.git&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;For example, when I want to add missing form validations in parallel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../traveledmap-fix-wording fix/add-form-validations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s the state of the folders after running that command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Users/qlerebours/Projects/traveledmap/              (branch feat/my-main-feature)
/Users/qlerebours/Projects/traveledmap-fix-add-form-validations/      (branch fix/add-form-validations)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;and the repository state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single &lt;code&gt;.git&lt;/code&gt; folder in &lt;code&gt;/Users/qlerebours/Projects/traveledmap/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Shared history&lt;/li&gt;
&lt;li&gt;Each folder uses its own branch&lt;/li&gt;
&lt;li&gt;Independent files&lt;/li&gt;
&lt;li&gt;Commits visible instantly across all worktrees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup lets your code assistant work on two features in parallel.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it: a concrete use case
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I’m working on my main feature on branch &lt;code&gt;feat/my-main-feature&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;I want to fix a missing-validation issue reported by Product Owners&lt;/li&gt;
&lt;li&gt;Codex is used to update the wording and its translations (same workflow with Claude Code and others)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Make the changes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Codex, I start a new conversation in my project and choose &lt;code&gt;Worktree&lt;/code&gt; and &lt;code&gt;from develop&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worktree: to work in parallel&lt;/li&gt;
&lt;li&gt;from develop: the base for my new branch
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpjep7e44gdooo8kl5yf.png" alt="Creating a worktree" width="800" height="154"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When I send my prompt, Codex announces it’s creating the worktree, which I can confirm with&lt;br&gt;
&lt;code&gt;git worktree list&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hph3v782iecpdv9xw0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hph3v782iecpdv9xw0y.png" alt="Created worktree" width="582" height="67"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When I go into the worktree folder (&lt;code&gt;/Users/qlerebours/.codex/worktrees/c6a5/traveledmap&lt;/code&gt;),&lt;br&gt;
I see the changes are done and ready to test &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nc0rttxbckbxsz2ws2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nc0rttxbckbxsz2ws2e.png" alt="Changes done" width="637" height="146"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Test the changes
&lt;/h3&gt;

&lt;p&gt;Here are the steps if you want to test the changes &lt;strong&gt;without pulling them locally&lt;/strong&gt;. Otherwise, you can go straight to&lt;br&gt;
"Take back control".&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure you’re in the worktree folder&lt;/li&gt;
&lt;li&gt;Since this folder starts from the &lt;code&gt;develop&lt;/code&gt; branch, I need to set up what’s required, for example:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cp .env.example .env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm i&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Then I just run the project with &lt;code&gt;pnpm run dev&lt;/code&gt; to test and validate the changes&lt;/li&gt;
&lt;li&gt;If new changes are needed, Codex will add them to the existing ones so you can test again&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Take back control
&lt;/h3&gt;

&lt;p&gt;If you want to take back control and make the changes yourself, you have several options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the worktree folder in your preferred code editor and make the desired changes.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the "Hand off to local" button at the top right of the Codex conversation, which commits the changes to a&lt;br&gt;
branch you can pull locally.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxocl7sgjesp7h7wwes1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxocl7sgjesp7h7wwes1.png" alt="Hand-off" width="800" height="736"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the new "Create a branch" button, which also creates a branch and pushes it if you want to open a PR directly.&lt;br&gt;
Either way, options 2 and 3 are effectively the same: they push changes to a branch you can pull locally or access on&lt;br&gt;
Github / Gitlab.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fya6zow2bd7dxbhozcts3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fya6zow2bd7dxbhozcts3.png" alt="Create branch" width="800" height="985"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The full documentation for this part is available &lt;a href="https://developers.openai.com/codex/app/worktrees#option-1-working-on-the-worktree" rel="noopener noreferrer"&gt;here&lt;/a&gt; for Codex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Understanding &lt;code&gt;git worktree&lt;/code&gt; now means understanding how to work efficiently with AI development assistants.&lt;/p&gt;

&lt;p&gt;I hope this article is useful. Writing it helped me clarify things I didn’t fully grasp myself.&lt;br&gt;
If you have any questions, feel free to reach out by email or on LinkedIn.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>git</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Upgrade your JHipster project to Java 17</title>
      <dc:creator>Quentin Lerebours</dc:creator>
      <pubDate>Thu, 14 Apr 2022 14:39:24 +0000</pubDate>
      <link>https://forem.com/qlerebours_/upgrade-your-jhipster-project-to-java-17-3al6</link>
      <guid>https://forem.com/qlerebours_/upgrade-your-jhipster-project-to-java-17-3al6</guid>
      <description>&lt;h1&gt;
  
  
  Run and deploy a JHipster project with Java 17
&lt;/h1&gt;

&lt;p&gt;Created: April 5, 2022 9:38 AM&lt;br&gt;
Tags: java, jhipster, spring&lt;/p&gt;

&lt;p&gt;In this short article, I’ll explain how to run and deploy a JHipster project using another version than the standard version which is used by JHipster (Java 11 currently).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Make it run on the targeted Java version
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use the right Java version locally
&lt;/h3&gt;

&lt;p&gt;Firstly, you need to have the targeted Java version on your local environment. If you are using &lt;a href="https://sdkman.io/" rel="noopener noreferrer"&gt;SDK man&lt;/a&gt; you can run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sdk list java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Once you have found the target version inside, install it with &lt;code&gt;sdk install java 17.0.2-open&lt;/code&gt; (for instance)&lt;/li&gt;
&lt;li&gt;Finally, run &lt;code&gt;sdk use java 17.0.2-open&lt;/code&gt; to use it in your current terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 SDK man is a great tool to manage multiple Java versions on your environment. It allows to easily install versions and switch between versions&lt;/p&gt;

&lt;h3&gt;
  
  
  Set the right Java version for the project
&lt;/h3&gt;

&lt;p&gt;Once you are using the right Java version locally, you just have to change the target release in the project. If you’re using Maven, you just need to change &lt;code&gt;&amp;lt;java.version&amp;gt;17&amp;lt;/java.version&amp;gt;&lt;/code&gt; in the &lt;code&gt;pom.xml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🎉 You are now ready to go, you can try to run the project with &lt;code&gt;./mvnw&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;💡 If you see an error saying “Invalid target release 11”, it’s probably that your local and project version are out of sync. They have to be the same (17 in my use case)&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Fix the CI
&lt;/h2&gt;

&lt;p&gt;If you are using a CI and your CI is using the &lt;code&gt;jhipster/jhipser:latest&lt;/code&gt; Docker image to run the project and the tests, it won’t work anymore because this Docker image is based on &lt;code&gt;eclipse-temurin:11-jre-focal&lt;/code&gt; which is using Java 11.&lt;/p&gt;

&lt;p&gt;It means that you will have to recreate your own Docker image based on Java 17, but don’t worry, it’s not complicated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the &lt;a href="https://github.com/jhipster/generator-jhipster" rel="noopener noreferrer"&gt;generator-jhipster&lt;/a&gt; project on Github&lt;/li&gt;
&lt;li&gt;Open the Dockerfile which is at the project’s root&lt;/li&gt;
&lt;li&gt;Edit the base image to &lt;code&gt;eclipse-temurin:17-jre-focal&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a repository on the docker hub. Let’s assume it’s called &lt;code&gt;myOrganization/jhipster-java-17&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Build the new image with &lt;code&gt;docker build . -t myOrganization/jhipster-java-17:latest&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Push the brand new image to the hub with &lt;code&gt;docker push myOrganization/jhipster-java-17:latest&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Finally, change the docker image used in your CI to &lt;code&gt;myOrganization/jhipster-java-17:latest&lt;/code&gt; and when your CI reruns, it will succeed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Edit your Cloud environment
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://www.bearstudio.fr/en" rel="noopener noreferrer"&gt;BearStudio&lt;/a&gt;, we are using &lt;a href="http://clever-cloud.com" rel="noopener noreferrer"&gt;CleverCloud&lt;/a&gt; which allows to edit the target Java version very easily thanks the &lt;code&gt;CC_JAVA_VERSION&lt;/code&gt; environment variable, which set up to 17 before saving your changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You’re done, your JHipster project should now run on Java 17 🎉&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don’t use JHipster yet, you can learn how to generate your first project with JHipster with &lt;a href="https://www.bearstudio.fr/blog/developpement/jhipster-generateur-projet-hipsters" rel="noopener noreferrer"&gt;this article&lt;/a&gt; (which is in French).&lt;/p&gt;

</description>
      <category>java</category>
      <category>jhipster</category>
      <category>spring</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
