仕込み編
$ cd $HOME $ mkdir .dotfiles $ cd .dotfiles (2010/01/04追記;忘れてました) $ git init $ git remote add origin <YOUR_GIT_REPOSITORY> $ cat > import_dotfiles.rb #!/usr/bin/ruby require "fileutils" DEST_DIR = File.expand_path("~/.dotfiles") TARGETS = <<EOS ~/.bash_profile ~/.bashrc ~/.hgrc ~/.gitconfig ~/.gitignore ~/.git-completion.bash.ps1only ~/.gvimrc ~/.inputrc ~/.screenrc ~/.vim ~/.vimrc ~/.zshrc ~/.MacOSX EOS TARGETS.each { |target| from = File.expand_path(target.strip) if FileTest.exists?(from) puts "#{from} --> #{DEST_DIR}" FileUtils.cp_r(from, DEST_DIR) end } $ chmod +x import_dotfiles.rb $ ./import_dotfiles.rb $ git add . $ git commit -m "initial import" (↓2010/01/04修正;別マシンでcloneすることを考えるとmasterは合った方がいい) $ git push origin master $ git checkout -b <YOUR_HOST_NAME>
日常編
ドットファイルを編集した後は、以下の作業を行います。
$ cd $HOME/.dotfiles $ ./import_dotfiles.rb $ git commit -a -m <COMMIT_MESSAGE> $ git push
ブランチ名をマシンごとに変えているので、1つの共有リポジトリに複数のマシンのドットファイルを管理できます。
とりあえず、これでしばらく運用してみます。
別マシンでドットファイル管理をはじめる場合
一度以下を実行した後は、最初のマシンの日常編と同じです。
another$ cd $HOME another$ git clone <YOUR_GIT_REPOSITORY>/dotfiles.git .dotfiles another$ cd .dotfiles another$ git checkout -b <ANOTHER_HOST_NAME> another$ ./import_dotfiles.rb another$ git add . another$ git commit -m <COMMIT_MESSAGE> another$ git push origin <ANOTHER_HOST_NAME>
別マシン上のファイル内容との比較など
YOUR_HOST_NAMEが今のマシン、ANOTHER_HOST_NAMEが比較対象マシンだとします。
まずは、リモートブランチから、比較対象マシンのローカルブランチを作ります。
$ git checkout -t origin/<ANOTHER_HOST_NAME>
一度ブランチ作っておけば、後はpullで更新するだけでずっと使えます。
ファイル内容比較は、今のマシン用のブランチ上で以下を実行します。
$ git diff <ANOTHER_HOST_NAME> -- <FILE_PATH> (例) $ git diff <ANOTHER_HOST_NAME> -- .vimrc
ファイル内容の取得は、今のマシン用のブランチ上で以下を実行します。
$ git show <ANOTHER_HOST_NAME>:<FILE_PATH> (例) $ git show <ANOTHER_HOST_NAME>:.vimrc > .vimrc-another