環境、OSごとに.gitconfigの設定を切り替えたい

やりたいこと

  • 職場と個人のPCで、ユーザー名とメールアドレスは違うものを使用したい
  • coreのエディター、diffツール、mergeツールは、OSごとに異なるものを使用したい
  • alias、color、などの設定は全ての環境で同じにしたい

方法

Git 1.7.10 から、gitconfigでincludeディレクティブが使用できるようになった。
これを使用することにより、別のファイルの読み込みができるようになる。

  • .giconfigの設定
[include]
	path = .gitconfig.user
	path = .gitconfig.os

.gitconfig.userと.gitconfig.osを環境に合わせたシンボリックリンクを張る。

会社
Windows x86 Windows x64 Solaris Linux Windows Linux
.gitconfig.user
.gitconfig.orangeclover
.gitconfig.REALNAME
.gitconfig.os
.gitconfig.windows.x86
.gitconfig.windows.x64
.gitconfig.solaris
.gitconfig.linux

○:リンクを張るもの


シンボリックリンク

実際には、.gitconfig.*は以下のディレクトリに置いてある
~/dotfiles/
%userprofile\dotfiles

LinuxSolaris
  • 設定方法
  ln -s 実際のファイル リンク
    $ cd ~
    $ ln -s dotfiles/.gitconfig.linux .gitconfig.os
    $ ln -s dotfiles/.gitconfig.orangeclover .gitconfig.user
Windows

XP、Vista、7、8、2003、2008、2012で使用するコマンドが違う。
lnとオプションの順番も違ったりするので困る。

    mklink リンク 実際のファイル
  cd %userproile%
  C:\Users\orangeclover>mklink .gitconfig.user dotfiles\.gitconfig.orangeclover
  .gitconfig.user <<===>> dotfiles\.gitconfig.orangeclover のシンボリック リンクが
  作成されました


  C:\Users\orangeclover>mklink .gitconfig.os dotfiles\.gitconfig.windows.x64
  .gitconfig.os <<===>> dotfiles\.gitconfig.windowsx64 のシンボリック リンクが作
  成されました

gitconfig

共通(.gitconfig)
[include]
	path = .gitconfig.user
	path = .gitconfig.os
[color]
	ui = auto
[color "diff"]
	meta = white bold
	frag = cyan
	old = red
	new = green
	whitespace = red reverse
[alias]
	st = status
	sts = status --short
	co = checkout
	br = branch
	ci = commit

[mergetool]
	keepBackup = false
Windows.x64
[core]
	quotepath = false
	editor = 'C:/Program Files (x86)/Hidemaru/Hidemaru.exe' //fu8

[merge]
	tool = WinMerge
[mergetool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
[diff]
	tool = WinMerge
	guitool = WinMerge
[difftool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -ub -dl \"Theirs Files\" -dr \"Mine  Files\" \"$REMOTE\" \"$LOCAL\"
[credential]
	helper = cache --timeout=3600
Windows.x86
[core]
	quotepath = false
	editor = 'C:/Program Files/Hidemaru/Hidemaru.exe' //fu8

[merge]
	tool = WinMerge
[mergetool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
[diff]
	tool = WinMerge
	guitool = WinMerge
[difftool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -ub -dl \"Theirs Files\" -dr \"Mine  Files\" \"$REMOTE\" \"$LOCAL\"

[credential]
	helper = cache --timeout=3600
Linux
[core]
	editor = emacsclient -nw
Solaris
[core]
	pager = nkf -e | LESSCHARSET=utf-8 less
	editor = emacsclient -nw