Eyes, JAPAN Blog > Dotfiles を Git で効率よく管理する (修正)

Dotfiles を Git で効率よく管理する (修正)

LyEdward

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんにちは、アルバイトのエドワードです。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 を参考にできますよ!

それでは。

参考

https://www.atlassian.com/git/tutorials/dotfiles(英語)

Comments are closed.