gitプロファイル読み出し順序

51957 ワード

    :zhanhailiang   :2014-11-03

gitには3つのプロファイルが含まれています.
/etc/gitconfigファイル:システム内のすべてのユーザーに一般的に適用される構成.git configを使用するときに'–system'オプションを使用すると、このファイルが読み書きされます.

~/.gitconfigファイル:ユーザーディレクトリの下のプロファイルは、そのユーザーにのみ適用されます.git configを使用するときに'–global'オプションを使用すると、このファイルが読み書きされます.

現在のプロジェクトのgitディレクトリのプロファイル(つまり、作業ディレクトリの.git/configファイル):ここでの構成は、現在のプロジェクトにのみ有効です.各レベルの構成は、上位レベルの同じ構成を上書きするので、git/configの構成は、/etc/gitconfigの同名変数を上書きします.

git config–listで現在の構成を表示できます.
[root@~/wade/git/node-lessons]# git config --list
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=https://github.com/alsotang/node-lessons.git
branch.master.remote=origin
branch.master.merge=refs/heads/master

straceを使用してgitプロファイルのロード順序を確認することもできます.
[root@~/wade/git/node-lessons]# strace git config --list
execve("/usr/bin/git", ["git", "config", "--list"], [/* 27 vars */]) = 0
brk(0)                                  = 0x151a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66c000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=30968, ...}) = 0
mmap(NULL, 30968, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f82cd664000
close(3)                                = 0
open("/lib64/libz.so.1", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 !\340\3611\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=91096, ...}) = 0
mmap(0x31f1e00000, 2183696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x31f1e00000
mprotect(0x31f1e15000, 2093056, PROT_NONE) = 0
mmap(0x31f2014000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x31f2014000
close(3)                                = 0
open("/lib64/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340] \3611\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=145896, ...}) = 0
mmap(0x31f1200000, 2212848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x31f1200000
mprotect(0x31f1217000, 2097152, PROT_NONE) = 0
mmap(0x31f1417000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x31f1417000
mmap(0x31f1419000, 13296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x31f1419000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\356\341\3601\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1926680, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd663000
mmap(0x31f0e00000, 3750152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x31f0e00000
mprotect(0x31f0f8a000, 2097152, PROT_NONE) = 0
mmap(0x31f118a000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18a000) = 0x31f118a000
mmap(0x31f118f000, 18696, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x31f118f000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd662000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd661000
arch_prctl(ARCH_SET_FS, 0x7f82cd662700) = 0
mprotect(0x31f2014000, 4096, PROT_READ) = 0
mprotect(0x31f1417000, 4096, PROT_READ) = 0
mprotect(0x31f118a000, 16384, PROT_READ) = 0
mprotect(0x31f0c1f000, 4096, PROT_READ) = 0
munmap(0x7f82cd664000, 30968)           = 0
set_tid_address(0x7f82cd6629d0)         = 25648
set_robust_list(0x7f82cd6629e0, 0x18)   = 0
futex(0x7fffa73c199c, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7fffa73c199c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f82cd662700) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0x31f1205c60, [], SA_RESTORER|SA_SIGINFO, 0x31f120f710}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x31f1205cf0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x31f120f710}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=10240*1024, rlim_max=RLIM_INFINITY}) = 0
brk(0)                                  = 0x151a000
brk(0x153b000)                          = 0x153b000
getcwd("/root/wade/git/node-lessons", 4096) = 28
stat(".git", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
access(".git/objects", X_OK)            = 0
access(".git/refs", X_OK)               = 0
lstat(".git/HEAD", {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
open(".git/HEAD", O_RDONLY)             = 3
read(3, "ref: refs/heads/master
"
, 255) = 23 read(3, "", 232) = 0 close(3) = 0 access("/etc/gitconfig", R_OK) = 0 open("/etc/gitconfig", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 access("/root/.gitconfig", R_OK) = 0 open("/root/.gitconfig", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 stat(".git", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 access(".git/config", R_OK) = 0 open(".git/config", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=269, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "[core]
\trepositoryformatversion "
..., 4096) = 269 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 access("/etc/gitconfig", R_OK) = 0 open("/etc/gitconfig", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 access("/root/.gitconfig", R_OK) = 0 open("/root/.gitconfig", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 access(".git/config", R_OK) = 0 open(".git/config", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=269, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66b000 read(3, "[core]
\trepositoryformatversion "
..., 4096) = 269 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82cd66a000 write(1, "core.repositoryformatversion=0
"
, 31core.repositoryformatversion=0 ) = 31 write(1, "core.filemode=true
"
, 19core.filemode=true ) = 19 write(1, "core.bare=false
"
, 16core.bare=false ) = 16 write(1, "core.logallrefupdates=true
"
, 27core.logallrefupdates=true ) = 27 write(1, "remote.origin.fetch=+refs/heads/"..., 56remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* ) = 56 write(1, "remote.origin.url=https://github"..., 63remote.origin.url=https://github.com/alsotang/node-lessons.git ) = 63 write(1, "branch.master.remote=origin
"
, 28branch.master.remote=origin ) = 28 write(1, "branch.master.merge=refs/heads/m"..., 38branch.master.merge=refs/heads/master ) = 38 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f82cd66b000, 4096) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 close(1) = 0 munmap(0x7f82cd66a000, 4096) = 0 exit_group(0) = ?

これによりgitプロファイルのロード順が/etc/gitconfig→~/とすることができる.gitconfig → .git/configでは、最後にロードされた同名の構成が前者のロードされた構成を上書きします.