はじめに
みなさんは開発時、複数のブランチをどのように扱っていますか? 多くの場合、git switchやgit stashを駆使して切り替えているかと思います。
ただ、現在の作業を中断したくない時や、ブランチごとに環境を分けて動作確認したい時もあると思います。僕はgit worktreeという機能が、こうしたケースに使えるのではないかと考えました。
この記事では、git worktreeとシンボリックリンクを組み合わせて、この課題を解決した流れを共有したいと思います。
前提
弊社では、メンバー共通の開発環境用のサーバーを用意しており、メンバーそれぞれのディレクトリ(/home/user1/src/product_code)配下に環境を構築しています。
そして、ディレクトリ構造が開発環境の設定にそのまま影響している状態でした。
また、それぞれの開発環境は、サービスとして起動してあり、サービス設定ファイルもディレクトリ構造に強く依存している状態でした。
開発環境用の設定ファイルは、github管理しておらず、開発環境用のディレクトリ配下に設定ファイル群を設置していました。
実現する流れ
元々のディレクトリ名を変更する
mv ~/src/product_code ~/src/code_main
これによって、元々のディレクトリ名の空ディレクトリを作ることができ、そこにシンボリックリンクを貼ることができます。
元々のディレクトリ名の空ディレクトリを作成する
mkdir ~/src/product_code
元々のディレクトリ配下にシンボリックリンクを作成する
ln -sfn ~/src/code_main/* ~/src/product_code
これによって、設定ファイルに書いた開発環境構築用のパスを変更することなく、切り替えることができます。
他のブランチへの付け替え
git worktreeを使って、他のディレクトリに他ブランチのコードを作成する
git worktree add ../code_sub sub_branch
元々のディレクトリ名へのリンク元を付け替える
ln -sfn ~/src/code_sub/* ~/src/product_code
図にするとこんな感じ
最後に
git worktreeとsymlinkを掛け合わせて、いろいろ試してみましたが、やりたいことが実現できると嬉しいですね。
