<?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>DEV Community: Adesoji1</title>
    <description>The latest articles on DEV Community by Adesoji1 (@adesoji1).</description>
    <link>https://dev.to/adesoji1</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F208554%2Fc762eff9-1d32-4e88-9cb5-4718f9acf4c7.jpg</url>
      <title>DEV Community: Adesoji1</title>
      <link>https://dev.to/adesoji1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adesoji1"/>
    <language>en</language>
    <item>
      <title>How I Run Two Claude Code Accounts Side by Side in VS Code on Ubuntu Without Losing My History</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Sat, 05 Sep 2026 17:31:35 +0000</pubDate>
      <link>https://dev.to/adesoji1/how-i-run-two-claude-code-accounts-side-by-side-in-vs-code-on-ubuntu-without-losing-my-history-33eh</link>
      <guid>https://dev.to/adesoji1/how-i-run-two-claude-code-accounts-side-by-side-in-vs-code-on-ubuntu-without-losing-my-history-33eh</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8eze3cr8x078dxif9maf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8eze3cr8x078dxif9maf.png" alt="How i run 2 vscode" width="800" height="450"&gt;&lt;/a&gt;I wanted a very specific setup on my Ubuntu machine: two different Claude accounts, both usable from the Claude Code VS Code extension, without repeatedly logging one account out to use the other.&lt;/p&gt;

&lt;p&gt;I also wanted to keep the local Claude Code history and memory I had already built up, and I did not want the second account to interfere with my normal VS Code profile.&lt;/p&gt;

&lt;p&gt;The setup that worked for me is simple once the pieces are separated properly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal VS Code
    |
    v
~/.claude
    |
    v
Claude Account 1

VS Code launched with code-claude2
    |
    v
~/.claude-account2
    |
    v
Claude Account 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important idea is that Claude Code already supports a custom configuration directory through &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt;. Anthropic documents this variable as an override for the default &lt;code&gt;~/.claude&lt;/code&gt; directory and specifically notes that it is useful for running multiple accounts side by side.&lt;/p&gt;

&lt;p&gt;VS Code also supports &lt;code&gt;--user-data-dir&lt;/code&gt;, which lets you run isolated VS Code instances with separate settings, environment variables, extensions, and UI state.&lt;/p&gt;

&lt;p&gt;Putting those two features together gives each Claude account its own home without requiring two Linux users or two separate installations of VS Code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This is the setup I used on Ubuntu with Bash and the Claude Code VS Code extension. Replace &lt;code&gt;/home/your-user&lt;/code&gt; with your actual absolute home path.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The problem this solves
&lt;/h2&gt;

&lt;p&gt;The obvious way to use two Claude accounts is to keep logging out and logging back in.&lt;/p&gt;

&lt;p&gt;I did not want that.&lt;/p&gt;

&lt;p&gt;Logging in and out of the same Claude profile means both identities are sharing the same configuration location. That creates unnecessary risk around credentials, session state, local history, and memory.&lt;/p&gt;

&lt;p&gt;I wanted this instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACCOUNT 1                         ACCOUNT 2
---------                         ---------
Own Claude login                  Own Claude login
Own Claude config                 Own Claude config
Own VS Code state                 Own VS Code state
Existing history                  Copied starting history
Existing memory                   Copied starting memory
No logout required                No logout required
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also wanted both accounts to be able to open the same Git repository.&lt;/p&gt;

&lt;p&gt;That means the source code remains in one place. Only Claude's account state and the second VS Code profile are isolated.&lt;/p&gt;




&lt;h2&gt;
  
  
  A GitHub issue you should know about before setting this up
&lt;/h2&gt;

&lt;p&gt;There is an open Claude Code issue, &lt;strong&gt;anthropics/claude-code #78988&lt;/strong&gt;, about &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; values that contain a literal &lt;code&gt;~&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The reported problem is easy to miss.&lt;/p&gt;

&lt;p&gt;If Claude Code receives something like this literally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.claude-account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;through a path where the shell does not expand &lt;code&gt;~&lt;/code&gt;, Claude Code can interpret it as a relative path. The issue report shows Claude creating a directory literally named &lt;code&gt;~&lt;/code&gt; inside the current project and writing configuration data there.&lt;/p&gt;

&lt;p&gt;That can include session transcripts, history, backups, and other Claude data.&lt;/p&gt;

&lt;p&gt;The issue was still open when I checked it on 5 September 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  The fix I used
&lt;/h3&gt;

&lt;p&gt;I never pass a tilde to &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I use the full absolute path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/your-user/.claude-account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and in VS Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CLAUDE_CONFIG_DIR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home/your-user/.claude-account2"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CLAUDE_CONFIG_DIR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.claude-account2"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one of the most important details in the whole setup.&lt;/p&gt;

&lt;p&gt;You can find your real home directory with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it prints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;use that absolute path everywhere in the Account 2 configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1: Preserve the existing Claude Code data
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Close active Claude Code sessions
&lt;/h2&gt;

&lt;p&gt;I first stopped active Claude sessions and closed VS Code before copying anything.&lt;/p&gt;

&lt;p&gt;For the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I checked for active processes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pgrep &lt;span class="nt"&gt;-af&lt;/span&gt; claude
pgrep &lt;span class="nt"&gt;-af&lt;/span&gt; code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I did not start killing processes blindly. The goal was simply to avoid copying files while Claude was actively writing to them.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Back up the original Claude profile
&lt;/h2&gt;

&lt;p&gt;My original Claude profile stays in the default location:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before touching it, I made a timestamped backup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;STAMP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d-%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.claude"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.claude-backup-&lt;/span&gt;&lt;span class="nv"&gt;$STAMP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Backup created at: &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.claude-backup-&lt;/span&gt;&lt;span class="nv"&gt;$STAMP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-ld&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/.claude&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I kept the original &lt;code&gt;.claude&lt;/code&gt; directory exactly where it was. Account 1 would continue using it.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Create a second Claude configuration directory
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/your-user/.claude-account2
&lt;span class="nb"&gt;chmod &lt;/span&gt;700 /home/your-user/.claude-account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point the structure is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/
|
|-- .claude
|     `-- Account 1
|
`-- .claude-account2
      `-- Account 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 2: Copy history and memory without copying Account 1's login
&lt;/h2&gt;

&lt;p&gt;Claude Code stores local conversation transcripts under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude/projects/&amp;lt;project&amp;gt;/&amp;lt;session-id&amp;gt;.jsonl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Auto memory is stored per project under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude/projects/&amp;lt;project&amp;gt;/memory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anthropic's documentation describes those session transcripts as local JSONL files and auto memory as machine-local project memory.&lt;/p&gt;

&lt;p&gt;That was useful for me because I wanted Account 2 to start with a copy of the local context I had already built.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Copy the useful data
&lt;/h2&gt;

&lt;p&gt;The critical rule is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do not copy Account 1's authentication credentials into Account 2.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I used &lt;code&gt;rsync&lt;/code&gt; and excluded credentials and disposable runtime state.&lt;/p&gt;

&lt;p&gt;A clean version of the copy command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'.credentials.json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'backups/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ide/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'sessions/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'session-env/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'shell-snapshots/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'debug/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'remote-settings.json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'policy-limits.json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  /home/your-user/.claude/ &lt;span class="se"&gt;\&lt;/span&gt;
  /home/your-user/.claude-account2/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why exclude &lt;code&gt;backups/&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;During my first pass I copied the backup directory. Claude then found an old &lt;code&gt;.claude.json&lt;/code&gt; backup from Account 1 and suggested restoring it into Account 2. I did not want Account 1's application or OAuth state becoming the starting state for Account 2.&lt;/p&gt;

&lt;p&gt;Excluding the backup directory avoids that confusion.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Verify that history and memory actually copied
&lt;/h2&gt;

&lt;p&gt;Compare the sizes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /home/your-user/.claude/projects
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /home/your-user/.claude-account2/projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my case the directories were roughly the same size, which was a good sign.&lt;/p&gt;

&lt;p&gt;I also checked the file counts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/your-user/.claude/projects &lt;span class="nt"&gt;-type&lt;/span&gt; f | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
find /home/your-user/.claude-account2/projects &lt;span class="nt"&gt;-type&lt;/span&gt; f | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And checked for memory directories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/your-user/.claude-account2/projects &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-name&lt;/span&gt; memory | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two copies do not need to be byte-for-byte identical, especially if runtime files were excluded.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Make sure Account 2 has no credentials yet
&lt;/h2&gt;

&lt;p&gt;Before logging Account 2 in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /home/your-user/.claude-account2/.credentials.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"STOP: credentials already exist"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"GOOD: Account 2 has no credentials yet"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result I wanted was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GOOD: Account 2 has no credentials yet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never print the contents of &lt;code&gt;.credentials.json&lt;/code&gt; to the terminal or paste it into a chat.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 3: Give Account 2 a clean Claude state and log it in
&lt;/h2&gt;

&lt;p&gt;On my installation, Claude expected an Account 2 state file at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.claude-account2/.claude.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I initialized it cleanly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'{}\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /home/your-user/.claude-account2/.claude.json
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 /home/your-user/.claude-account2/.claude.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I launched Claude using the alternate config directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/your-user/.claude-account2 &lt;span class="se"&gt;\&lt;/span&gt;
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I completed the first-run theme screen and signed in with the second Claude account.&lt;/p&gt;

&lt;p&gt;After login, I checked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and, where available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I exited:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /home/your-user/.claude-account2/.credentials.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At that point the account separation was real:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACCOUNT 1
/home/your-user/.claude
    |
    |-- .credentials.json
    `-- projects/

ACCOUNT 2
/home/your-user/.claude-account2
    |
    |-- .credentials.json
    |-- .claude.json
    `-- projects/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 4: Make the VS Code extension use Account 2
&lt;/h2&gt;

&lt;p&gt;This was the part that mattered most to me because I use the Claude Code VS Code extension much more than the CLI.&lt;/p&gt;

&lt;p&gt;VS Code can launch a completely separate user-data environment with &lt;code&gt;--user-data-dir&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That means the second VS Code instance can have its own:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings
Extensions
UI state
Environment
Claude extension state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without touching normal VS Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Create a separate VS Code user-data directory
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/your-user/.config/Code-Claude-Account2/User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My two VS Code states now look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal VS Code:
~/.config/Code

Account 2 VS Code:
~/.config/Code-Claude-Account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Configure the Claude extension in Account 2
&lt;/h2&gt;

&lt;p&gt;The Account 2 VS Code settings file is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.config/Code-Claude-Account2/User/settings.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"claudeCode.environmentVariables"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CLAUDE_CONFIG_DIR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home/your-user/.claude-account2"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"claudeCode.preferredLocation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"window.title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CLAUDE ACCOUNT 2 | ${activeEditorShort}${separator}${rootName}"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The custom window title is optional, but I like it because it makes it difficult to forget which VS Code window I am using.&lt;/p&gt;

&lt;p&gt;Notice the absolute path again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.claude-account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;~&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Anthropic documents &lt;code&gt;claudeCode.environmentVariables&lt;/code&gt; as a supported extension setting for environment variables passed to the Claude process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 5: Create a dedicated &lt;code&gt;code-claude2&lt;/code&gt; launcher
&lt;/h2&gt;

&lt;p&gt;I created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.local/bin/code-claude2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/your-user/.claude-account2"&lt;/span&gt;

&lt;span class="nv"&gt;CODE_BIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; code&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CODE_BIN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: VS Code 'code' command not found in PATH."&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi

&lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CODE_BIN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--user-data-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/your-user/.config/Code-Claude-Account2"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--new-window&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;700 /home/your-user/.local/bin/code-claude2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which code-claude2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result should point to the new launcher.&lt;/p&gt;

&lt;p&gt;Why set &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; in both the launcher and the extension settings?&lt;/p&gt;

&lt;p&gt;I wanted the separation to be obvious at both levels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code-claude2
    |
    |-- VS Code process gets CLAUDE_CONFIG_DIR
    |
    `-- Claude extension gets CLAUDE_CONFIG_DIR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 6: Keep Settings Sync off in Account 2
&lt;/h2&gt;

&lt;p&gt;This deserves its own section.&lt;/p&gt;

&lt;p&gt;I do not want Account 2's special VS Code settings syncing back into my normal VS Code environment.&lt;/p&gt;

&lt;p&gt;In the Account 2 VS Code window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl+Shift+P
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings Sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If VS Code shows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings Sync: Turn Off
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I run it.&lt;/p&gt;

&lt;p&gt;If it offers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Turn On Settings Sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backup and Sync Settings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then Sync is already off.&lt;/p&gt;

&lt;p&gt;VS Code's documentation confirms that Settings Sync is something you explicitly turn on and that the &lt;code&gt;Settings Sync: Turn off&lt;/code&gt; command disables it.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub login is still fine
&lt;/h3&gt;

&lt;p&gt;I can sign the second VS Code profile into the same GitHub account I normally use.&lt;/p&gt;

&lt;p&gt;GitHub authentication and VS Code Settings Sync are separate concerns.&lt;/p&gt;

&lt;p&gt;I use GitHub authentication for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clone
Pull
Push
Fetch
GitHub extensions
Repository access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but I leave Settings Sync off in the Account 2 VS Code profile.&lt;/p&gt;

&lt;p&gt;When VS Code offers to enable Backup and Sync Settings, I decline it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional extra protection
&lt;/h3&gt;

&lt;p&gt;Check whether your VS Code build supports a &lt;code&gt;--sync&lt;/code&gt; argument:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code &lt;span class="nt"&gt;--help&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A2&lt;/span&gt; &lt;span class="nt"&gt;-B2&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'--sync'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your build explicitly shows support for &lt;code&gt;--sync off&lt;/code&gt;, you can add it to the Account 2 launcher:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CODE_BIN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--user-data-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/your-user/.config/Code-Claude-Account2"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--sync&lt;/span&gt; off &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--new-window&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I would only add this after checking &lt;code&gt;code --help&lt;/code&gt; on the machine. The important baseline is still the isolated &lt;code&gt;--user-data-dir&lt;/code&gt; and keeping Settings Sync turned off in that profile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 7: Verify the second VS Code before trusting it
&lt;/h2&gt;

&lt;p&gt;Launch a project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/your-user/projects/my-app
code-claude2 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the integrated terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should print exactly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/.claude-account2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude auth status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the Claude Code panel and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That should show Account 2.&lt;/p&gt;

&lt;p&gt;I also checked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and Session History to confirm the copied local context was available.&lt;/p&gt;




&lt;h2&gt;
  
  
  Will Account 2 see my old Claude Code sessions?
&lt;/h2&gt;

&lt;p&gt;It can see the local history that was copied into its own &lt;code&gt;projects/&lt;/code&gt; directory, provided the project path matches.&lt;/p&gt;

&lt;p&gt;Claude Code stores sessions using the project or working directory. If an old session was created from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/your-user/projects/my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;open that same project path when checking Session History.&lt;/p&gt;

&lt;p&gt;Opening a duplicate of the repository from another path can make Claude treat it as a different project.&lt;/p&gt;

&lt;p&gt;Also remember that the initial copy is a snapshot.&lt;/p&gt;

&lt;p&gt;After the split:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Account 1 memory                  Account 2 memory
       |                                 |
       v                                 v
changes independently              changes independently
       |                                 |
       +----------- no automatic --------+
                    sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I do not continuously &lt;code&gt;rsync&lt;/code&gt; the two Claude directories back and forth. That could overwrite newer sessions, state, or credentials.&lt;/p&gt;

&lt;p&gt;Project-level files such as &lt;code&gt;CLAUDE.md&lt;/code&gt; that live inside the repository are naturally shared because both VS Code instances are opening the same source tree.&lt;/p&gt;




&lt;h2&gt;
  
  
  If I click the normal VS Code icon, which Claude account opens?
&lt;/h2&gt;

&lt;p&gt;This is one of the questions I wanted answered clearly before relying on the setup.&lt;/p&gt;

&lt;p&gt;My normal VS Code icon still launches the default VS Code environment.&lt;/p&gt;

&lt;p&gt;Assuming I have &lt;strong&gt;not&lt;/strong&gt; globally exported &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; in &lt;code&gt;.bashrc&lt;/code&gt;, normal VS Code uses Claude's default config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal VS Code icon
       |
       v
~/.config/Code
       |
       v
No custom CLAUDE_CONFIG_DIR
       |
       v
~/.claude
       |
       v
Claude Account 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means clicking my ordinary VS Code icon opens the setup for &lt;strong&gt;Account 1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I can verify this in normal VS Code with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLAUDE_CONFIG_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should normally print nothing.&lt;/p&gt;

&lt;p&gt;Claude then falls back to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which is Account 1.&lt;/p&gt;

&lt;p&gt;A useful rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do not export the Account 2 &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; globally in &lt;code&gt;.bashrc&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Account 2 override belongs in the Account 2 launcher and Account 2 VS Code settings only.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I choose which Claude account opens a project
&lt;/h2&gt;

&lt;p&gt;This is the part that makes the whole setup easy to live with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open a project with Account 1
&lt;/h2&gt;

&lt;p&gt;From inside the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/your-user/projects/my-app
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code /home/your-user/projects/my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code .
  |
  v
Normal VS Code
  |
  v
Claude Account 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Open the same project with Account 2
&lt;/h2&gt;

&lt;p&gt;From inside the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/your-user/projects/my-app
code-claude2 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code-claude2 /home/your-user/projects/my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code-claude2 .
      |
      v
Isolated VS Code
      |
      v
/home/your-user/.config/Code-Claude-Account2
      |
      v
CLAUDE_CONFIG_DIR=/home/your-user/.claude-account2
      |
      v
Claude Account 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both VS Code instances can open the same Git repository.&lt;/p&gt;

&lt;p&gt;I just avoid asking both Claude sessions to edit the same file at the same moment.&lt;/p&gt;




&lt;h2&gt;
  
  
  One thing to be careful about when opening folders graphically
&lt;/h2&gt;

&lt;p&gt;This is easy to forget.&lt;/p&gt;

&lt;p&gt;If I double-click a folder or file in Ubuntu and choose &lt;strong&gt;Open with Visual Studio Code&lt;/strong&gt;, Ubuntu normally launches the standard VS Code application.&lt;/p&gt;

&lt;p&gt;In my setup that means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Graphical "Open with Visual Studio Code"
                 |
                 v
          Normal VS Code
                 |
                 v
          Claude Account 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; automatically know that I wanted Account 2.&lt;/p&gt;

&lt;p&gt;For Account 2, I either use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code-claude2 /path/to/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or create a separate Ubuntu desktop launcher called something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VS Code - Claude Account 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A desktop file can look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[Desktop Entry]&lt;/span&gt;
&lt;span class="py"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;VS Code - Claude Account 2&lt;/span&gt;
&lt;span class="py"&gt;Comment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Visual Studio Code using Claude Account 2&lt;/span&gt;
&lt;span class="py"&gt;Exec&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/home/your-user/.local/bin/code-claude2 %F&lt;/span&gt;
&lt;span class="py"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;visual-studio-code&lt;/span&gt;
&lt;span class="py"&gt;Terminal&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;false&lt;/span&gt;
&lt;span class="py"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Application&lt;/span&gt;
&lt;span class="py"&gt;Categories&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Development;IDE;&lt;/span&gt;
&lt;span class="py"&gt;StartupNotify&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save it as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.local/share/applications/vscode-claude-account2.desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.local/share/applications/vscode-claude-account2.desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives me two obvious graphical entry points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visual Studio Code
VS Code - Claude Account 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What about GitHub in the second VS Code?
&lt;/h2&gt;

&lt;p&gt;I use the same GitHub account in both VS Code environments.&lt;/p&gt;

&lt;p&gt;In Account 2 I can sign into GitHub from Source Control or when VS Code needs authentication for a pull or push.&lt;/p&gt;

&lt;p&gt;The key distinction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub sign-in                 OK
Settings Sync                  Keep OFF
Claude Account 2 path          Keep isolated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Signing into GitHub does not mean I have to turn on Settings Sync.&lt;/p&gt;




&lt;h2&gt;
  
  
  A quick safety check for API environment variables
&lt;/h2&gt;

&lt;p&gt;If an Anthropic API key is exported globally, it can change which authentication method Claude uses.&lt;/p&gt;

&lt;p&gt;I check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;env&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'^ANTHROPIC_(API_KEY|AUTH_TOKEN|BASE_URL)='&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-nH&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'ANTHROPIC_API_KEY\|ANTHROPIC_AUTH_TOKEN\|ANTHROPIC_BASE_URL'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  ~/.bashrc ~/.profile ~/.bash_profile 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a normal Claude subscription login, I do not want an unexpected API key overriding it.&lt;/p&gt;

&lt;p&gt;Never paste an actual API key or &lt;code&gt;.credentials.json&lt;/code&gt; contents into a blog, issue, chat, or screenshot.&lt;/p&gt;




&lt;h2&gt;
  
  
  The final workflow
&lt;/h2&gt;

&lt;p&gt;This is what I ended up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    UBUNTU
                      |
          +-----------+-----------+
          |                       |
          v                       v
   NORMAL VS CODE          ACCOUNT 2 VS CODE
      code .                code-claude2 .
          |                       |
          v                       v
 ~/.config/Code      ~/.config/Code-Claude-Account2
          |                       |
          v                       v
     ~/.claude             ~/.claude-account2
          |                       |
          v                       v
 Claude Account 1          Claude Account 2
          |                       |
          v                       v
 GitHub as normal          GitHub as normal
 Settings Sync as          Settings Sync OFF
 I normally prefer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And for any project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Want Claude Account 1?
code /path/to/project

Want Claude Account 2?
code-claude2 /path/to/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No logout.&lt;/p&gt;

&lt;p&gt;No account swapping inside one Claude profile.&lt;/p&gt;

&lt;p&gt;No second Linux user.&lt;/p&gt;

&lt;p&gt;No duplicate source repository required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;Before I considered the setup finished, I checked all of these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Account 1 still uses /home/your-user/.claude

[ ] Account 2 uses /home/your-user/.claude-account2

[ ] Account 1 and Account 2 each have their own .credentials.json

[ ] Account 2 started with copied project history and memory

[ ] CLAUDE_CONFIG_DIR always uses an absolute path

[ ] Account 2 VS Code uses its own --user-data-dir

[ ] echo "$CLAUDE_CONFIG_DIR" in Account 2 prints the Account 2 path

[ ] /status or /usage confirms the correct Claude account

[ ] Settings Sync remains OFF in Account 2

[ ] Normal VS Code still opens Account 1

[ ] code . opens Account 1

[ ] code-claude2 . opens Account 2

[ ] Graphical folder opening is treated as Account 1 unless I use the Account 2 launcher
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For me, that is the cleanest way to run two Claude Code identities side by side on one Ubuntu workstation.&lt;/p&gt;

&lt;p&gt;The main lesson is that the accounts themselves are not the difficult part. The important part is isolating the state around them: Claude's config directory, VS Code's user-data directory, and the environment variable that connects the two.&lt;/p&gt;

&lt;p&gt;Once those are separate, switching accounts becomes nothing more than choosing the right launcher.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources and further reading
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Anthropic, Claude Code environment variables&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.claude.com/docs/en/env-vars" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/env-vars&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic, Claude Code in VS Code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.claude.com/docs/en/vs-code" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/vs-code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic, Claude Code memory&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/memory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic, Claude Code sessions&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.claude.com/docs/en/sessions" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/sessions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code command line documentation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.visualstudio.com/docs/configure/command-line" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/configure/command-line&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code Settings Sync documentation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://code.visualstudio.com/docs/configure/settings-sync" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/configure/settings-sync&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code GitHub issue #78988&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/anthropics/claude-code/issues/78988" rel="noopener noreferrer"&gt;https://github.com/anthropics/claude-code/issues/78988&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>vscode</category>
      <category>ubuntu</category>
      <category>developer</category>
    </item>
    <item>
      <title>Choosing the Right Git Branching Strategy for Your Organization</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Wed, 11 Oct 2023 11:24:18 +0000</pubDate>
      <link>https://dev.to/adesoji1/choosing-the-right-git-branching-strategy-for-your-organization-3o9p</link>
      <guid>https://dev.to/adesoji1/choosing-the-right-git-branching-strategy-for-your-organization-3o9p</guid>
      <description>&lt;p&gt;Effective version control is at the heart of modern software development, and Git has become the industry standard for managing source code. Git offers a flexible branching model that allows teams to collaborate, track changes, and maintain code stability. However, to fully harness the power of Git, it's crucial to establish a clear and effective branching strategy tailored to your organization's needs. In this article, we'll explore the importance of choosing the right Git branching strategy and discuss several popular options.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Significance of a Git Branching Strategy
&lt;/h2&gt;

&lt;p&gt;A well-defined Git branching strategy streamlines the development process, enhances collaboration, and ensures code quality. It offers a framework for managing different aspects of your codebase, including feature development, bug fixes, and release management. Here are some key benefits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Isolation of Features&lt;/strong&gt; 🌱: Feature branches allow developers to work on new functionality in isolation, preventing conflicts with the main codebase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaboration&lt;/strong&gt; 🤝: A branching strategy facilitates collaboration by providing a structured approach to code contributions and reviews.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release Management&lt;/strong&gt; 🚀: It simplifies the process of preparing and deploying new releases, ensuring that only stable and tested code is pushed to production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Stability&lt;/strong&gt; 🛡️: It promotes code stability by separating experimental or in-progress work from the production-ready code.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Common Git Branching Strategies
&lt;/h2&gt;

&lt;p&gt;There are several branching strategies to consider, depending on the specific needs of your organization. Let's explore a few of the most popular ones:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Feature Branch Workflow&lt;/strong&gt; 🚀🌱
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: This strategy involves creating a new branch for each feature or issue. These branches are typically branched off from the main development branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: It keeps feature development isolated, making it easy to manage and test new functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: Developers should regularly merge the latest changes from the main development branch into their feature branches to avoid integration issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Git Flow&lt;/strong&gt; 🌊🚦
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: Git Flow defines a specific branching model with long-lived branches, including &lt;code&gt;master&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, &lt;code&gt;feature/&lt;/code&gt;, &lt;code&gt;release/&lt;/code&gt;, and &lt;code&gt;hotfix/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: It provides a clear structure for different types of development work, making it suitable for larger projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: The Git Flow model can be more complex and may require disciplined use of the various branch types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;GitHub Flow&lt;/strong&gt; 🐙💬
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: GitHub Flow is a simplified workflow used in GitHub and similar platforms. Development occurs on feature branches, and changes are merged into the main branch (usually named &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;) via pull requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: It encourages a fast-paced, review-centric development process, well-suited for smaller teams and frequent deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: GitHub Flow may require careful attention to automated testing and continuous integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Trunk-Based Development&lt;/strong&gt; 🌲✏️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: This strategy involves minimal branching, where developers commit directly to the main branch (e.g., &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: It encourages frequent integration and can work well for smaller teams and projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: To maintain code stability, strong continuous integration practices and automated testing are essential.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Release Branching&lt;/strong&gt; 🚀🌿
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: A new branch is created for each major release. Developers continue working on feature branches and merge changes into the release branch as needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: This strategy provides a clear structure for release management, ensuring that only stable features are included in a release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: It may involve extra coordination and testing efforts as you approach a release.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;GitOps Workflow&lt;/strong&gt; 🛠️💻
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt;: Focused on managing infrastructure and configurations using Git, GitOps deploys and configures applications based on changes to Git repositories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;: It brings the benefits of version control to infrastructure and configurations, allowing for automated, auditable, and repeatable deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Considerations&lt;/strong&gt;: GitOps may require a shift in infrastructure management practices and tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing the Right Strategy
&lt;/h2&gt;

&lt;p&gt;The choice of a Git branching strategy should align with your organization's development workflow, release cycle, and project requirements. Here are some key considerations to help you decide:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Team Size&lt;/strong&gt;: Smaller teams may benefit from simpler strategies like GitHub Flow or Trunk-Based Development, while larger teams may prefer Git Flow or Release Branching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release Frequency&lt;/strong&gt;: If you have frequent releases, a strategy that emphasizes rapid integration, such as GitHub Flow or Trunk-Based Development, could be more suitable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing and Automation&lt;/strong&gt;: Consider your testing and continuous integration capabilities. Strategies like GitHub Flow and Trunk-Based Development rely heavily on automated testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release Stability&lt;/strong&gt;: If your organization values code stability in production releases, a strategy like Release Branching or Git Flow may be preferable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infrastructure Management&lt;/strong&gt;: For organizations focusing on infrastructure and configuration management, GitOps may be the right choice.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remember that the chosen strategy is not set in stone and can evolve as your organization's needs change. Regularly revisit and adjust your Git branching strategy to ensure it continues to support efficient and high-quality software development.&lt;/p&gt;

&lt;p&gt;In conclusion, a well-defined Git branching strategy is a critical component of successful version control and software development. By selecting the strategy that best aligns with your organization's needs, you can streamline development, improve collaboration, and ensure the delivery of stable and reliable software. Whether you opt for a simple workflow like GitHub Flow or a more structured approach like Git Flow, the key is to adapt and optimize your strategy as your projects and teams evolve.&lt;/p&gt;

</description>
      <category>git</category>
      <category>versioncontrol</category>
      <category>softwaredevelopment</category>
      <category>collaborationstrategies</category>
    </item>
    <item>
      <title>Set up a CI/CD pipeline using GitHub Actions to a GKE cluster</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Tue, 31 Jan 2023 11:17:53 +0000</pubDate>
      <link>https://dev.to/adesoji1/set-up-a-cicd-pipeline-using-github-actions-to-a-gke-cluster-4fj</link>
      <guid>https://dev.to/adesoji1/set-up-a-cicd-pipeline-using-github-actions-to-a-gke-cluster-4fj</guid>
      <description>&lt;p&gt;Setting up a CI/CD pipeline using GitHub Actions to a Google Kubernetes Engine (GKE) cluster&lt;/p&gt;

&lt;p&gt;In this article, we'll show you how to set up a Continuous Integration/Continuous Deployment (CI/CD) pipeline using GitHub Actions to a GKE cluster. A CI/CD pipeline automates the deployment of code changes to a production environment. With this setup, code changes will be automatically deployed to the GKE cluster whenever code is pushed to the GitHub repository.&lt;/p&gt;

&lt;p&gt;Step 1: Create a GitHub repository&lt;/p&gt;

&lt;p&gt;Create a GitHub repository for your project and push the code to the repository. click &lt;a href="https://docs.github.com/en/get-started/quickstart/create-a-repo" rel="noopener noreferrer"&gt;here&lt;/a&gt; on how to create a github repository and proceed to step 2&lt;/p&gt;

&lt;p&gt;Step 2: Create a GKE cluster&lt;/p&gt;

&lt;p&gt;Create a GKE cluster using the Google Cloud Console or the gcloud CLI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Frmw1fscz3u35pv39svmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Frmw1fscz3u35pv39svmf.png" alt="Create a GKE cluster using the Google Cloud Console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;CLUSTER_NAME&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;ZONE&amp;gt;&lt;/code&gt; with the appropriate values for your project.&lt;/p&gt;

&lt;p&gt;Step 3: Create a Kubernetes deployment&lt;/p&gt;

&lt;p&gt;Create a file named &lt;code&gt;deployment.yml&lt;/code&gt; or &lt;code&gt;.yaml&lt;/code&gt; .Create a Kubernetes deployment that defines the desired state of your application. The deployment should specify the number of replicas, the container image to use, and any environment variables or secrets required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fkmyjlfpplcuddptwncl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fkmyjlfpplcuddptwncl2.png" alt="create depolyment.yml"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;DEPLOYMENT_NAME&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;REPLICAS&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;APP_LABEL&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;CONTAINER_NAME&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;IMAGE_NAME&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;ENV_VAR_NAME&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;ENV_VAR_VALUE&amp;gt;&lt;/code&gt; with the appropriate values for your project&lt;/p&gt;

&lt;p&gt;Step 4: Create a GitHub Actions Workflow&lt;/p&gt;

&lt;p&gt;Create a GitHub Actions workflow to automate the deployment of the Kubernetes deployment to the GKE cluster. The workflow should perform the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check out the code from the GitHub repository.&lt;/li&gt;
&lt;li&gt;Build the container image.&lt;/li&gt;
&lt;li&gt;Push the container image to a container registry, such as Google Container Registry (GCR).&lt;/li&gt;
&lt;li&gt;Deploy the container image to the GKE cluster using kubectl.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A workflow is an automated procedure that can be configured to execute one or more jobs. Workflows are defined by a YAML file that is checked into your repository and run when triggered by an event there, manually, or according to a set schedule.&lt;/p&gt;

&lt;p&gt;A repository can have multiple workflows, each of which can carry out a unique set of tasks. Workflows are defined in the .github/workflows directory in a repository. One workflow could be used to create and test pull requests, another to deploy your application each time a release is made, and yet another to add a label each time a new issue is opened. &lt;/p&gt;

&lt;p&gt;Create a file named &lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; with the following content:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fnhcpclzuyo7t3iemws45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fnhcpclzuyo7t3iemws45.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fmm45znbzawrtlesgaz8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmm45znbzawrtlesgaz8a.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Remeber that this .yml should be written on a single yaml file, i splitted the screenshot into two in order for the contents to be visible&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;PROJECT_ID&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;CLUSTER_NAME&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;ZONE&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;IMAGE_NAME&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;VERSION&amp;gt;&lt;/code&gt; with the appropriate values for your project.&lt;/p&gt;

&lt;p&gt;Step 5: Add Secrets&lt;/p&gt;

&lt;p&gt;In the workflow, the &lt;code&gt;GCLOUD_AUTH&lt;/code&gt; secret is used to authenticate with the &lt;code&gt;GKE cluster&lt;/code&gt;. Create the &lt;code&gt;GCLOUD_AUTH&lt;/code&gt; secret in the GitHub repository and add the content of a service account key that has sufficient permissions to deploy to the GKE cluster.&lt;/p&gt;

&lt;p&gt;To create the secret, navigate to the GitHub repository, go to the "Settings" tab, and click on "Secrets." Then, click on the "New repository secret" button and give the secret a name (e.g. "GCLOUD_AUTH") and paste in the content of the service account key.&lt;/p&gt;

&lt;p&gt;Step 6: Push code changes to the GitHub repository&lt;/p&gt;

&lt;p&gt;Push code changes to the GitHub repository and observe the GitHub Actions workflow being triggered. If the workflow is successful, the changes should be automatically deployed to the GKE cluster.&lt;/p&gt;

&lt;p&gt;In conclusion, with the setup of a CI/CD pipeline using GitHub Actions, you can automate the deployment process and save time and effort in manual deployments. Additionally, the pipeline ensures that the latest code changes are deployed to the production environment, improving the overall quality of the application.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to become a DevOps Professional in 2023?</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Tue, 24 Jan 2023 15:44:45 +0000</pubDate>
      <link>https://dev.to/adesoji1/how-to-become-a-devops-professional-in-2023-717</link>
      <guid>https://dev.to/adesoji1/how-to-become-a-devops-professional-in-2023-717</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Gain a strong understanding of the &lt;a href="https://www.cs.cornell.edu/~dph/papers/principles.pdf"&gt;Principles and Practices of Software Development&lt;/a&gt; and &lt;a href="https://www.techtarget.com/searchitoperations/definition/IT-operations"&gt;IT Operations&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build a foundation in key technologies such as &lt;a href="https://www.linux.org"&gt;Linux&lt;/a&gt;, &lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt;, and  &lt;a href="https://en.wikipedia.org/wiki/Cloud_computing"&gt;cloud computing&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3 .Learn about containerization and orchestration tools such as &lt;a href="https://kubernetes.io/"&gt;kubernetes&lt;/a&gt; and &lt;a href="https://www.docker.com/"&gt;docker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4 .Familiarize yourself with infrastructure-as-code tools such as &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt; and &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;5 .Learn about monitoring and logging tools such as &lt;a href="https://prometheus.io/"&gt;Prometheus&lt;/a&gt; and &lt;a href="https://www.elastic.co/"&gt;Elasticsearch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;6 .Get hands-on experience through internships like &lt;a href="https://www.udacity.com/course/cloud-dev-ops-nanodegree--nd9991?utm_source=gsem_brand&amp;amp;utm_medium=ads_r&amp;amp;utm_campaign=12948014301_c_individuals&amp;amp;utm_term=127442639211&amp;amp;utm_keyword=cloud%20devops%20engineer%20udacity_e&amp;amp;gclid=CjwKCAiAoL6eBhA3EiwAXDom5ggmHRRMihJBkKV7kAmX6iMrP8OMaV5m5L5ZXluNSbL5x5S5OfeOYRoCou8QAvD_BwE"&gt;udacity&lt;/a&gt;,&lt;a href="https://torre.co/t/devops/jobs/internships/munich-germany"&gt;torre&lt;/a&gt; or  personal projects hosted on &lt;a href="https://github.com/"&gt;Github&lt;/a&gt;, or contributing to open-source projects in &lt;a href="https://www.cncf.io/projects/"&gt;cncf&lt;/a&gt; and &lt;a href="https://kodekloud.com/"&gt;Kodekloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;7 .Consider earning certifications, such as &lt;a href="https://aws.amazon.com/certification/certified-devops-engineer-professional/"&gt;AWS Certified DevOps Engineer&lt;/a&gt; or, &lt;a href="https://azure.microsoft.com/en-us/products/devops"&gt;Azure Devops&lt;/a&gt; or  &lt;a href="https://cloud.google.com/certification/cloud-devops-engineer"&gt;Google Cloud Professional DevOps Engineer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;8 .Continuously learn and stay up-to-date with the latest trends and technologies in the field.&lt;/p&gt;

&lt;p&gt;9 .Network with other professionals in the industry, attend meetups, and participate in online communities.&lt;/p&gt;

&lt;p&gt;10 .Look for job opportunities, apply, and build your career in this field.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>cloudskills</category>
      <category>career</category>
    </item>
    <item>
      <title>Using Helm to deploy a Frontend and backend Application</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Thu, 12 Jan 2023 17:47:49 +0000</pubDate>
      <link>https://dev.to/adesoji1/using-helm-to-deploy-a-frontend-and-backend-application-2j2p</link>
      <guid>https://dev.to/adesoji1/using-helm-to-deploy-a-frontend-and-backend-application-2j2p</guid>
      <description>&lt;p&gt;Helm is a package manager for Kubernetes that makes it easy to manage and deploy applications to a cluster. Helm charts are a way to package and distribute applications and their dependencies, making it easy to deploy and manage those applications on a cluster. In this article, we will go over how to create a Helm chart that deploys two application containers: a frontend app and its backend into a Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;1.Creating a Helm Chart&lt;/p&gt;

&lt;p&gt;To create a Helm chart, we will first need to install Helm on our local machine. Once Helm is installed, we can use the Helm CLI to create a new chart. To do this, we will use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm create mychart

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fy2xypexf7flv5is0n7km.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%2Fy2xypexf7flv5is0n7km.png" alt="Image description" width="623" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will create a new chart called "mychart" in the current directory. The chart will contain several files and directories that make up the structure of the chart. The most important files are the "Chart.yaml" file, which contains metadata about the chart, and the "values.yaml" file, which contains the default values for the chart's variables.The chart.yaml file seen in the picture above was the yaml file used in the project and available at my github repository&lt;/p&gt;

&lt;p&gt;2.Deploying Two Application Containers&lt;/p&gt;

&lt;p&gt;Once the chart is created, we can start adding our application containers to it. To do this, we will create two new directories in the chart, one for the frontend app and one for the backend app. In each of these directories, we will create a new file called "deployment.yaml", which will contain the Kubernetes deployment configuration for the corresponding app.&lt;/p&gt;

&lt;p&gt;In the deployment.yaml file, we will specify the image for the container, the number of replicas, and the ports that the container will expose. We will also specify any environment variables or volumes that the container requires. Once the deployment.yaml file is created for both the frontend and backend, we will add them to the chart's templates directory.&lt;/p&gt;

&lt;p&gt;3.Configuring Ingress&lt;/p&gt;

&lt;p&gt;Once the chart is configured to deploy our two application containers, we will need to configure Ingress to access our applications. Ingress is a Kubernetes resource that allows external traffic to reach our applications. To configure Ingress, we will create a new file in the chart's templates directory called "ingress.yaml". This file will contain the configuration for the Ingress resource. example of an ingress file is seen below.&lt;/p&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%2Fzlrtjvgh5h1t7xzrwq7p.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%2Fzlrtjvgh5h1t7xzrwq7p.png" alt="Image description" width="325" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the ingress.yaml file, we will specify the hostname and path for the Ingress resource, as well as the service that it should route traffic to. We will also specify any annotations or rules that are needed for the Ingress resource to work correctly. Once the ingress.yaml file is created, we will add it to the chart's templates directory. A diagram that illustrates the architecture of this solution could be drawn using &lt;a href="//draw.io"&gt;draw.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the chart is configured and all the necessary files are added, we can use Helm to deploy it to our Kubernetes cluster. To do this, we will use the following command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm install mychart

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will deploy our two application containers and configure Ingress to access them. With this configuration, we can now access our frontend and backend application . This post just shares the concept behind using helm. The complete files are available at my github profile. kindly view my github and star my repository. &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Adesoji1" rel="noopener noreferrer"&gt;
        Adesoji1
      &lt;/a&gt; / &lt;a href="https://github.com/Adesoji1/Deploy-Web-App-Using-Helm" rel="noopener noreferrer"&gt;
        Deploy-Web-App-Using-Helm
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Create a helm chart ,.Your helm chart should deploy two application containers: a frontend app and it’s backend into your Kubernetes cluster
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Deploy-Web-App-Using-Helm&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Create a helm chart ,.Your helm chart should deploy two application containers: a frontend app and it’s backend into your Kubernetes cluster&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Adesoji1/Deploy-Web-App-Using-Helm" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>softwaredevelopment</category>
      <category>python</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>Deploying BLOOM. A 176Billion Parameter Multi-Lingual Large Language Model.</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Thu, 12 Jan 2023 17:13:50 +0000</pubDate>
      <link>https://dev.to/adesoji1/deploying-bloom-a-176billion-parameter-multi-lingual-large-language-model-2334</link>
      <guid>https://dev.to/adesoji1/deploying-bloom-a-176billion-parameter-multi-lingual-large-language-model-2334</guid>
      <description>&lt;p&gt;&lt;code&gt;BLOOM is a multi-lingual large language model that was recently introduced by Facebook AI. It is a transformer-based&lt;/code&gt; model that is trained on a massive amount of text data from multiple languages, resulting in a model with 176 billion parameters. This makes BLOOM one of the largest language models currently available, and it is capable of performing many natural language processing (NLP) tasks with high accuracy and efficiency.&lt;/p&gt;

&lt;p&gt;Deploying BLOOM in a production environment can be a complex task, as it requires a significant amount of computational resources and memory. However, the benefits of using such a large language model can be significant, particularly in applications such as machine translation, text summarization, and question answering.&lt;/p&gt;

&lt;p&gt;The first step in deploying BLOOM is to acquire the necessary resources. This includes a high-performance computing cluster with a large amount of memory and storage. Additionally, the model will require a large amount of data to fine-tune and evaluate. This can include text data from multiple languages, as well as annotated data for specific NLP tasks.&lt;/p&gt;

&lt;p&gt;Once the resources are acquired, the next step is to prepare the data. This includes cleaning, preprocessing, and vectorizing the text data. The data should also be split into training, validation, and test sets for evaluation.&lt;/p&gt;

&lt;p&gt;The next step is to fine-tune the model on the prepared data. This can be done using a library such as Hugging Face's Transformers, which provides a simple interface for fine-tuning and evaluating transformer-based models. The fine-tuning process can take several days, depending on the amount of data and the computational resources available.&lt;/p&gt;

&lt;p&gt;Once the model is fine-tuned, it can be deployed in a production environment. This can be done by exporting the model and serving it using a framework such as TensorFlow Serving or Hugging Face's Model Hub. The model can then be used to perform NLP tasks such as machine translation, text summarization, and question answering.&lt;/p&gt;

&lt;p&gt;Here is an example Python script that demonstrates how to fine-tune and deploy BLOOM using the Hugging Face's Transformers library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from transformers import AutoModelForCausalLM, AutoTokenizer

# load the BLOOM model
model = AutoModelForCausalLM.from_pretrained("facebook/bloom-base-176b")
tokenizer = AutoTokenizer.from_pretrained("facebook/bloom-base-176b")

# fine-tune the model on your data
# code to fine-tune the model

# save the fine-tuned model
model.save_pretrained('./fine_tuned_model')
tokenizer.save_pretrained('./fine_tuned_model')

# load the fine-tuned model
model = AutoModelForCausalLM.from_pretrained('./fine_tuned_model')
tokenizer = AutoTokenizer.from_pretrained('./fine_tuned_model')

# use the model to perform NLP tasks
output = model.generate(tokenizer.encode("What is the meaning of life?"))
print(tokenizer.decode(output[0]))


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In conclusion, This is how i could explain what it takes to deploy a multi-lingual large language model . Hope you enjoyed the article? kindly like my post&lt;/p&gt;

</description>
      <category>nlp</category>
      <category>facebook</category>
      <category>bert</category>
      <category>memorymanagement</category>
    </item>
    <item>
      <title>Text2Topic</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Thu, 12 Jan 2023 16:59:17 +0000</pubDate>
      <link>https://dev.to/adesoji1/text2topic-56n4</link>
      <guid>https://dev.to/adesoji1/text2topic-56n4</guid>
      <description>&lt;p&gt;Text to topic generation in NLP is a process that involves identifying the main topics or themes present in a given text. This process is typically performed using machine learning algorithms such as Latent Dirichlet Allocation (LDA) or Non-negative Matrix Factorization (NMF). These algorithms are able to identify patterns in the text data and extract the underlying topics.&lt;/p&gt;

&lt;p&gt;Python is a popular programming language for implementing text to topic generation in NLP. One of the main reasons for this is the availability of powerful libraries such as Gensim, NLTK, and scikit-learn that make it easy to implement these algorithms. Additionally, Python is a versatile language that can be used for both data preprocessing and modeling.&lt;/p&gt;

&lt;p&gt;To implement text to topic generation in NLP using Python, the following steps are typically followed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Data preprocessing: This involves cleaning the text data, removing stop words, and tokenizing the text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vectorization: This involves converting the text data into a numerical format that can be used by the machine learning algorithm. This can be done using techniques such as bag of words or TF-IDF.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Model training: This involves training the machine learning algorithm on the vectorized text data. This can be done using libraries such as Gensim or scikit-learn.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;4.Topic extraction: Once the model is trained, it can be used to extract the main topics present in the text data. This can be done by analyzing the model's output and identifying the most probable topics.&lt;/p&gt;

&lt;p&gt;5.Evaluation: The topics extracted from the text data can be evaluated using various metrics such as perplexity or coherence score.&lt;/p&gt;

&lt;p&gt;The results of text to topic generation can be used for a variety of tasks such as text classification, sentiment analysis, and information retrieval. It can also be used to identify patterns and trends in the text data, which can be useful for businesses and organizations to understand their customer behavior and preferences.&lt;/p&gt;

&lt;p&gt;In summary, text to topic generation in NLP is a powerful technique that can be used to extract the main topics present in a given text. Python programming language is popular choice for implementing this technique due to the availability of powerful libraries and its versatility. It can be used for a variety of tasks such as text classification, sentiment analysis, and information retrieval and can also be used to identify patterns and trends in the text data.Here is a sample Python script below that demonstrates text to topic generation using the Gensim library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# import the necessary libraries
from gensim import corpora, models
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# define the text data
text_data = ["This is some sample text about topic A",
             "This is some more text about topic B",
             "And this is some text about topic C"]

# preprocess the text data
stop_words = set(stopwords.words('english'))
texts = [[word for word in word_tokenize(document.lower()) if word not in stop_words] for document in text_data]

# create a dictionary from the text data
dictionary = corpora.Dictionary(texts)

# create a corpus from the text data
corpus = [dictionary.doc2bow(text) for text in texts]

# train the LDA model on the corpus
ldamodel = models.LdaModel(corpus, num_topics=3, id2word=dictionary)

# extract the topics from the model
topics = ldamodel.print_topics(num_topics=3, num_words=3)

# print the topics
for topic in topics:
    print(topic)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>discuss</category>
    </item>
    <item>
      <title>No-Code Transfer Learning from Rules &amp; Models in the Annotation Lab</title>
      <dc:creator>Adesoji1</dc:creator>
      <pubDate>Thu, 12 Jan 2023 16:48:29 +0000</pubDate>
      <link>https://dev.to/adesoji1/no-code-transfer-learning-from-rules-models-in-the-annotation-lab-53fm</link>
      <guid>https://dev.to/adesoji1/no-code-transfer-learning-from-rules-models-in-the-annotation-lab-53fm</guid>
      <description>&lt;p&gt;Transfer learning is a powerful technique in machine learning that allows a model to learn from one task and apply that knowledge to a different, but related, task. This technique has become increasingly popular in recent years, particularly in the field of natural language processing (NLP). NLP is the use of computers to process and analyze human language, making it a perfect fit for transfer learning.&lt;/p&gt;

&lt;p&gt;One area where transfer learning has been particularly useful is in the annotation lab. Annotation is the process of adding information to a text or image, such as labels, comments, or tags. In the annotation lab, transfer learning can be used to improve the accuracy and efficiency of the annotation process.&lt;/p&gt;

&lt;p&gt;One approach to transfer learning in the annotation lab is using no-code transfer learning from rules and models. This approach allows for the implementation of transfer learning without the need for coding or programming knowledge. This is particularly useful for non-technical users who want to implement transfer learning in their annotation lab.&lt;/p&gt;

&lt;p&gt;The steps involved in implementing no-code transfer learning from rules and models in the annotation lab are as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Collect a large corpus of text data: This will be used to train the model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Annotate the text data: This will be used to fine-tune the model.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use a natural language processing script: This script will be used to train the model on the text data.&lt;/li&gt;
&lt;li&gt;Fine-tune the model: The model will be fine-tuned on the annotated text data.&lt;/li&gt;
&lt;li&gt;Evaluate the model: The model will be evaluated on a test set to determine its accuracy.&lt;/li&gt;
&lt;li&gt;Annotate text data: The model will be used to annotate text data.&lt;/li&gt;
&lt;li&gt;Evaluate the annotation: The annotation will be evaluated to determine its accuracy.&lt;/li&gt;
&lt;li&gt;Repeat steps 3-7 as needed: The model will be fine-tuned and evaluated until it reaches an acceptable level of accuracy.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;In this approach, the natural language processing script plays a crucial role in the transfer learning process. This script is used to train the model on the text data, and it can be easily customized to fit the specific needs of the annotation lab. The script can also be used to fine-tune the model, making it more accurate and efficient.&lt;/p&gt;

&lt;p&gt;The benefits of using no-code transfer learning from rules and models in the annotation lab are numerous. First, it allows for faster and more accurate annotation of text data. Additionally, it can be used to improve the performance of existing models. It also allows for non-technical users to implement transfer learning in their annotation lab, making it more accessible to a wider range of users.&lt;/p&gt;

&lt;p&gt;Despite its benefits, no-code transfer learning from rules and models in the annotation lab does have some limitations. One of the biggest limitations is the lack of data. In order to train a model effectively, a large corpus of text data is required. Additionally, the data must be of high quality and well-annotated. Another limitation is the need for domain-specific knowledge. This is because the model needs to understand the context and meaning of the text in order to annotate it accurately.&lt;/p&gt;

&lt;p&gt;In conclusion, no-code transfer learning from rules and models in the annotation lab is a powerful technique that can be used to improve the accuracy and efficiency of the annotation process. It allows for the implementation of transfer learning without the need for coding or programming knowledge, making it accessible to a wider range of users. The natural language processing script plays a crucial role in the transfer learning process, and it can be easily customized to fit the specific needs of the annotation lab. Despite its limitations, no-code transfer learning from rules&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
  </channel>
</rss>
