環境、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を環境に合わせたシンボリックリンクを張る。
- .gitconfig.userからシンボリックリンクを張るもの
- .gitconfig.orangeclover
- .gitconfig.REALNAME
- .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
Linux、Solaris
- 設定方法
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とオプションの順番も違ったりするので困る。
- Windows 7の場合
- 設定方法
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