私は自分の~/.profileや~/.bash_profile・~/.bashrcなどを~/.sh.dや~/.bash.dといったディレクトリに入れてgitで管理しています。
…ホームディレクトリ配下をgit(やhg)で管理したいという方は多いと思います。私も考えました…が、やめました。理由はいくつかあります。
- ホームディレクトリ配下のドットファイルをgitで管理するには、ホームディレクトリのほとんどを~/.gitignoreに入れる必要があります。グローバルに無視したいファイルのリストを~/.gitignore_globalに書いて~/.gitconfigで指定する、などの別解もありますが、これは最近の私のモットー「デフォルトを大切に」に反します(くわしくは
man git-ignore
を参照)。 - Linuxや(Mac )OS Xでファイルを使い回すことを考えると、gitで共有する意味のあるファイルは案外少ないと考えています。たとえば~/.Xresourcesの中で
#include /Users/h12o
としてしまうと、Linuxでも使えるようにするためにはcd / && sudo ln -s home Users
とする必要があります。root権限があればいいのですが、なければ別の対応をするしかありません。
こういったことを考えながら整理していくと、本当にgitで管理したいと思うファイルは~/.bashrcなどシェルが読むファイル、それから~/.emacs.d配下のファイルくらいのものです。
であれば管理しやすいように~/.bashrcなどはサブディレクトリに入れてシンボリックリンクを張ることで対応し、「github.com/h12o/.sh.d」「github.com/h12o/.bash.d」「github.com/h12o/.emacs.d」といった直感的なレポジトリとしてGithubで公開したいと考えました。つまり、自分のドットファイルを公開するにあたり「github.com/h12o/dot-emacs-d」のようなレポジトリ名には、したくなかったのです。ローカルのレポジトリ名とリモートのレポジトリ名を変えるのもそれはそれで混乱しますし、かといってどこかのdot-emacs-dディレクトリでファイルを変更するたびにmake install
とかするのも面倒です。
(私はWindowsではUnix由来のシェルを使いませんので、私の場合Windowsのことを考える必要はありません。もっとも、仮に使ったとしてもNTFSがシンボリックリンクに対応しているので根本的には問題ありません)
といったことを思案しながらできあがったのが、私の~/.sh.dと~/.bash.dです。
-
h12o/.sh.d
- なるべくbashismを排除したつもりですが(00setup.shに対しては
checkbashisms
(1)を使用してチェック済み)、Solarisなどいにしえの/bin/shが動作する環境を持ち合わせていないため、bashismが排除できていないかもしれません。
- なるべくbashismを排除したつもりですが(00setup.shに対しては
-
h12o/.bash.d
- 環境変数を指定する場所をなるべく1箇所にするため、h12o/.bash.dはh12o/.sh.dの存在を前提としています。
なお、~/.sh.dと従来の~/.profileなどとの互換性・~/.bash.dと従来の~/.bash{rc,_profile}などとの互換性を保つ仕組みはシンボリックリンクですが、どのようにシンボリックリンクを張っているのかは、それぞれのレポジトリをみていただくのがよいかと思います。
ちなみに、実は~/.sshや~/.gnupgなどをgitで管理しようかどうか、正直思案しています。もちろん、これらをGithubで公開することはありませんが…。