LoginSignup
5
5

More than 5 years have passed since last update.

~/.sh.dと~/.bash.dをつくる

Posted at

私は自分の~/.profileや~/.bash_profile・~/.bashrcなどを~/.sh.dや~/.bash.dといったディレクトリに入れてgitで管理しています。

…ホームディレクトリ配下をgit(やhg)で管理したいという方は多いと思います。私も考えました…が、やめました。理由はいくつかあります。

  1. ホームディレクトリ配下のドットファイルをgitで管理するには、ホームディレクトリのほとんどを~/.gitignoreに入れる必要があります。グローバルに無視したいファイルのリストを~/.gitignore_globalに書いて~/.gitconfigで指定する、などの別解もありますが、これは最近の私のモットー「デフォルトを大切に」に反します(くわしくはman git-ignoreを参照)。
  2. 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が排除できていないかもしれません。
  • h12o/.bash.d
    • 環境変数を指定する場所をなるべく1箇所にするため、h12o/.bash.dはh12o/.sh.dの存在を前提としています。

なお、~/.sh.dと従来の~/.profileなどとの互換性・~/.bash.dと従来の~/.bash{rc,_profile}などとの互換性を保つ仕組みはシンボリックリンクですが、どのようにシンボリックリンクを張っているのかは、それぞれのレポジトリをみていただくのがよいかと思います。

ちなみに、実は~/.sshや~/.gnupgなどをgitで管理しようかどうか、正直思案しています。もちろん、これらをGithubで公開することはありませんが…。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5