エンジニア向け
Dotfiles を Git で効率よく管理する (修正)
LyEdward
こんにちは、アルバイトのエドワードです。6年前に青木さんが「Dotfiles を Git で効率よく管理する」について書いていましたが、現代的な方法を紹介したいと思います。先の方法と比べて、この方法はもっと楽になるかもしれません。
環境のセットアップ
ツールは git がまだ使用されます。今回はファイルの移動、シンボリックリンクの貼ること、Makefile で管理すること、他の従属が必要ありません。なので、手順がちょっと違います。
まず、新しいローカルリポジトリを作成します。
$ git init --bare $HOME/.dotfiles
このリポジトリを便利に使うのは、以下のエイリアスを .bashrc に保存し使用します。
$ echo "alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'" >> $HOME/.bashrc
$ source $HOME/.bashrc
そして、git のコマンドにまだ追加していないファイルを表示しないために、以下のオプションを設定します。
$ dotfiles config --local status.showUntrackedFiles no
ついに、git の代わりに dotfiles のエイリアスを書いて、好きなファイルを追加し、リモートリポジトリへ push できるようになりました。
$ dotfiles status
$ dotfiles add .bashrc
$ dotfiles commit -m "Add .bashrc"
$ dotfiles remote add origin <remote-ssh-url>
$ dotfiles push -u origin master
別環境に…
新しい環境に dotfiles を適用させるのは git clone するだけでは足りないので、以下のスクリプトを実行する必要があります。
#!/bin/bash
git clone --bare <remote-http-url> $HOME/.dotfiles
function dotfiles {
/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME $@
}
mkdir -p .dotfiles-backup
dotfiles checkout
if [ $? = 0 ]; then
echo "Checked out dotfiles.";
else
echo "Backing up pre-existing dotfiles.";
dotfiles checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .dotfiles-backup/{}
fi;
dotfiles checkout
dotfiles config --local status.showUntrackedFiles no
dotfiles remote set-url origin <remote-ssh-url> <remote-http-url>
このスクリプトは git clone 後に、リポジトリの設定を変更します。ファイルが既にある場合は、事前に .dotfiles-backup へ移動します。
終わりに
これにより新しい方法で dotfiles を管理することができるようになりました。完全な例を見たい場合は自分の dotfiles を参考にできますよ!
それでは。