教授や先輩から便利、便利と耳にしていた dotfiles について。
何それ美味しいの!? の状態から、bare git repository で dotfiles を管理するってすっげぇ便利じゃん! に至るまでの勉強ログをここに供養します。
この記事では、
- dotfilesとは
- bare git repositoryとは
- bare git repository を用いた dotfiles の管理の仕方
が学べます。
そもそも、dotfilesって?
.zshrc や .config/ など、名前が .(ドット)から始まる隠しファイルのこと。
これら dotfiles は主に、各種ツールの 設定 を担っています。
快適な設定ファイルが書けたぞ!
一度これぞ!という設定ファイルが書けたら、手元の PC だけでなく、別の PC や、 v100 等のリモートマシン上でも、同じ設定を使いたいぞ、となります。
しかし、設定ファイルは
~/.zshrc~/.config/kitty~/.config/nvim
など、あっちゃこっちゃに散らばっています。
さて、設定ファイルを1つずつコピーするのは面倒です。
git を使って dotfiles をうまく一元管理する方法を考えてみましょう。
dotfiles の最適な共有方法を考える
Gitで管理する方法を愚直に考えてみます。
-
方法1:ホームディレクトリで直接
git initする
→ ホームディレクトリ全体が対象になるため、.gitignore書くのが面倒... -
方法2:dotfiles の実体を別のフォルダ(ex.
~/dotfiles/)に集約し、シンボリックリンクを張る
→ リンクを張るのが面倒... -
方法3: git bare repository を活用する!🔥
→ シンボリックリンク不要!
Bareリポジトリとは?
Bare:裸の、むき出しの
Weblio辞書
「Bare」という名前の通り、 Working Tree を持たず、Gitの管理データ.gitのみがむき出しになっている 特殊なリポジトリです。
この方法を使って dotfiles を管理すると、設定ファイルを特定のフォルダに mv したり、リンクを張る手間は一切不要です。
すなわち、 設定ファイルは元の場所に置いたままgit管理 することができます。
bare git repository についての詳細な説明はこちら
はじめかた(git bare repository)
Step1. Bare リポジトリの作成と初期設定
まず、設定ファイルたち(dotfiles)の変更履歴を管理するための Bare リポジトリを作成します。
また、操作を簡単にするため、alias を設定しておくと便利です。
# 1. bare repo 作成
git init --bare $HOME/.dotfiles
# 2. オプションが長いので、alias を作成(config の c)
alias c='command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# 3. 未管理ファイルを非表示にする設定(普段の git には影響しない)
c config --local status.showUntrackedFiles no
💡補足:設定したalias の意味
-
command git:commandは内部コマンドで、「他の alias や関数を無視して、システム本来の git プログラムを直接実行する」という意味 -
--git-dir=$HOME/.dotfiles/: Gitの履歴や設定を保存する「管理データ(通常は.gitフォルダ)」の場所を、明示的に~/.dotfiles/(Bareリポジトリ)に指定 -
--work-tree=$HOME: 実際にファイルが置かれている「作業場(Working tree)」をホームディレクトリ(~/)に指定
これにより、他のGitプロジェクトには一切影響を与えず、ホームディレクトリ以下の dotfiles を c add .zshrc や c commit といった短いコマンドで安全に管理できる。
Step2. 設定ファイルの追加とPush
準備ができたので、実際に設定ファイルをバンバン追加して、GitHub や GitLab に保存します。
手始めに、.zshrc と .config/nvim をgit管理してみます。
いつもの git コマンドの代わりに、先ほど作った alias c を使うことだけ注意!
# add して commit
cd ~
c add .zshrc
c add .cnofig/nvim
c commit -m "Initial commit"
# Web UI等でリモートリポジトリを作成後、origin を設定した Push
c remote set-url origin git@github.com:自分のユーザ名/dotfiles.git
c push origin master
# 追跡している設定ファイルを確認したい場合
c ls-files
他にも管理したいファイルがあれば、
c add ファイル名c commit -m "hogehoge"c push origin master
していくだけでOKです。
Step3. エイリアスを永続化しておく
alias を .zshrc に書き込んでおきましょう。
# ~/.zshrc をエディタで開き、以下の1行を追加する
alias c='command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# 上記の変更自体も、早速 git で保存しておく
c add ~/.zshrc
c commit -m 'Add alias c'
c push origin master
Step4. 別のマシンに環境を複製する
別の環境(ex. Linuxマシン)で同じ設定を再現したいときは、別の環境上で以下のコマンドを実行しましょう。
ユーザ名の部分を変更することで、世の中に公開されている dotfiles repository を自分の環境に丸ごとコピーすることもできます。
事前に、自分の環境のバックアップを取っておくことに注意
git clone --bare git@github.com:ユーザ名/dotfiles.git $HOME/.dotfiles
alias c='command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# checkout すれば .zshrc 等の実体が ホームディレクトリ以下に展開される。同名のファイルが既に存在していると失敗するので、事前に退避すること
c checkout
# 未管理ファイルを非表示にする設定も追加しておく
c config status.showUntrackedFiles no
これにて、晴れて楽に dotfiles を管理できるようになりました!
皆さんの dotfiles を覗き見しながら、これからも自分の dotfiles を育てていきます!!🌻
ここまで読んでくださってありがとうございました!
