Git initial configuration file

git
init
新しくGitリポジトリを作ると,毎回アクセス権の変更を追跡したり,シンボリックリンク(symlink)がテキストファイルに変換されたりしていらいらしていた。そこで,Gitの設定について確認した。
git
config
Git全体の設定ができ,オプションを付けることでその適用範囲を決められる。Gitの設定ファイルは以下の表に掲載したファイルと役割となっている。
4.4:
git
設定ファイル
ファイル
設定オプション
説明
/etc/gitconfig
–system
全ユーザーの設定
~/.gitconfig
–global
ユーザごとの設定
.git/config
–local
リポジトリごとの設定。git
init
実行時に自動作成。git
config
の既定の変更。
問題となるのは,.git/configの設定だ。git
init
を実行すると自動的に以下の内容のファイルが作られる。
$
cat .git/config
[core]

repositoryformatversion
= 0

filemode
= true

bare
= false

logallrefupdates
= true

symlinks
= false

ignorecase
= true
ここで問題となるのが以下の二つの設定だ。

filemode
= true

symlinks
= false
この設定があると,ファイルのアクセス権の変更を追跡し,シンボリックリンクはテキストファイルに変換される。アクセス権は複数のパソコンでDropboxなんかで共有していると勝手に変わるので追跡してほしくない。また,シンボリックリンクも意味があってリンクを貼っているので勝手にテキストファイルにしてほしくない。
この既定の.git/configファイルは以下のやりとりによるとGitのソースコードで設定されているらしい。
参考:configuration
– Default config settings for a new git repository? – Stack Overflow
http://stackoverflow.com/questions/2093077/default-config-settings-for-a-new-git-repository
.git/configが一番優先されるため,~/.gitconfigでの指定が効かず,毎回リポジトリごとにこの設定を手動で変更する必要があった。
何か方法がないかと探していると方法があった。git
init
実行時のテンプレートファイルを指定できるようだ。以下の公式マニュアルによると,git
init
は以下の順番でテンプレートファイルを参照するらしい。
参考:Git
– git-init Documentation http://git-scm.com/docs/git-init
    The
    template directory used will (in order):
  • The
    argument given with the –template option.
  • The
    contents of the $GIT_TEMPLATE_DIR environment variable.
  • The
    init.templatedir configuration variable.
  • The
    default template directory: /usr/share/git-core/templates.
init.templatedirの設定で指定したディレクトリの中身をgit
init
のテンプレートにする方法が一番柔軟だと思った。以下のサイトを参考に設定してみた。
参考:git
hook
のテンプレート
Please Sleep http://please-sleep.cou929.nu/git-init-templatedir.html
cp
/usr/share/git-core/templates/ ~/.git-template
#
既定のテンプレートファイルをコピー
echo
[core]

repositoryformatversion
= 0

bare
= false

logallrefupdates
= true

ignorecase
= true

symlinks
= true

filemode
= false

symlinks
= true

filemode
= false
~
> ~/.git-template/config #
規定の設定を維持しつつ上書き
git
config –global init.templatedir ~/.git-template
こうすると git
init
のたびに~/.git-template/の中身がそのリポジトリの
.git
にコピーされる。すでにあるリポジトリに
git init
した場合は、既存のファイルを上書きすることはなく、安全に新しいテンプレートだけをコピーしてくれる。
filemodesymlinksはソースコードレベルで設定されるためか,同じ設定を2回書かないと上書きできなかった。警告が出て少し気持ち悪いがやむを得ない。

これでひとまずファイルのアクセス権は追跡せず,シンボリックリンクも維持できるようになった。git
init
するたびにいらいらしなくてすむのでよかった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です