我应该在哪里放置我的全局 'gitattributes' 文件?
Where should I place my global 'gitattributes' file?
我收集到(尽管缺少文档)a way to set Git attributes globally; but I'm not clear where to place the necessary gitattributes
file. The instructions说他们属于
$(prefix)/etc/gitattributes
但是 $(prefix)
在哪里?特别是,对于 OS X(Git 在 /usr/local/git/bin/git
中)它会在哪里?或者(或另外) ~/.gitattributes
work?
全局设置与系统范围设置
您问题的术语有些含糊。
在 Git 上下文中,"global" 通常表示 "user-level";换句话说,global 设置会影响 one 特定用户(活动用户)的所有存储库。相比之下,系统范围 设置会影响机器的所有 用户的所有存储库。
存储库级别的 gitattributes
(我只是为了完整性才提到这一点。)
根据 relevant section of the Pro Git book,
If you wish to affect only a single repository (i.e., to assign attributes to files that are particular to one user’s workflow for that repository), then attributes should be placed in the $GIT_DIR/info/attributes
file.
$GIT_DIR
通常会扩展为 <path-to-repo-root-directory>/.git
.
全局(用户级)gitattributes
根据 relevant section of the Pro Git book,
Attributes that should affect all repositories for a single user should be placed in a file specified by the core.attributesfile
configuration option [...]. Its default value is $XDG_CONFIG_HOME/git/attributes
. If $XDG_CONFIG_HOME
is either not set or empty, $HOME/.config/git/attributes
is used instead.
您也可以运行以下命令,
git config --global core.attributesfile <path>
将 Git 指向全局 gitattributes 文件的自定义路径 <path>
,例如~/.gitattributes
.
系统范围的 gitattributes
根据 relevant section of the Pro Git book,
Attributes for all users on a system should be placed in the $(prefix)/etc/gitattributes
file.
这自然引出了一个问题:
[...] But where is $(prefix)
?
请参阅 What is $(prefix) on $(prefix)/etc/gitconfig? 以获得答案。除非您为 prefix
分配了一个自定义的非空值,否则 $(prefix)
默认情况下会展开为空;因此,您的系统范围 gitattributes
文件应位于 /etc/
.
如果你读到这里仍然不知道 $prefix
在哪里(即它不仅仅是空白或 /usr/local
)或者为什么你的 /etc/gitattributes
没有被阅读,你可以使用 strace
或类似的工具来查看 git 正在检查的所有地方。 Strace 在 stderr 上打印了大量的调试信息,所以使用 2>&1
并过滤它,正如我在下面所做的那样,使用 grep
。我为示例选择的 git 命令使用属性文件,因为 --stat
会根据 -diff
属性更改,但是您尝试使用的任何 git 命令 运行到时候应该没问题。
例如,使用 SCL 在 RHEL 上安装更新的 git,您可能会得到这样的结果:
$ strace -f git log --stat -1 2>&1 | grep --color 'open.*attr'
open("/opt/rh/rh-git218/root/usr/etc/gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/home/username/.config/git/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".git/info/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
。 . .这表明这里的 $prefix 是 /opt/rh/rh-git218/root/usr
.
Strace 的 -f
在这里不是必需的,但是如果您不知道也不关心某些命令是否会 fork,首先添加 -f
可以消除您的机会不会看到您要查找的内容。
我收集到(尽管缺少文档)a way to set Git attributes globally; but I'm not clear where to place the necessary gitattributes
file. The instructions说他们属于
$(prefix)/etc/gitattributes
但是 $(prefix)
在哪里?特别是,对于 OS X(Git 在 /usr/local/git/bin/git
中)它会在哪里?或者(或另外) ~/.gitattributes
work?
全局设置与系统范围设置
您问题的术语有些含糊。 在 Git 上下文中,"global" 通常表示 "user-level";换句话说,global 设置会影响 one 特定用户(活动用户)的所有存储库。相比之下,系统范围 设置会影响机器的所有 用户的所有存储库。
存储库级别的 gitattributes
(我只是为了完整性才提到这一点。)
根据 relevant section of the Pro Git book,
If you wish to affect only a single repository (i.e., to assign attributes to files that are particular to one user’s workflow for that repository), then attributes should be placed in the
$GIT_DIR/info/attributes
file.
$GIT_DIR
通常会扩展为 <path-to-repo-root-directory>/.git
.
全局(用户级)gitattributes
根据 relevant section of the Pro Git book,
Attributes that should affect all repositories for a single user should be placed in a file specified by the
core.attributesfile
configuration option [...]. Its default value is$XDG_CONFIG_HOME/git/attributes
. If$XDG_CONFIG_HOME
is either not set or empty,$HOME/.config/git/attributes
is used instead.
您也可以运行以下命令,
git config --global core.attributesfile <path>
将 Git 指向全局 gitattributes 文件的自定义路径 <path>
,例如~/.gitattributes
.
系统范围的 gitattributes
根据 relevant section of the Pro Git book,
Attributes for all users on a system should be placed in the
$(prefix)/etc/gitattributes
file.
这自然引出了一个问题:
[...] But where is
$(prefix)
?
请参阅 What is $(prefix) on $(prefix)/etc/gitconfig? 以获得答案。除非您为 prefix
分配了一个自定义的非空值,否则 $(prefix)
默认情况下会展开为空;因此,您的系统范围 gitattributes
文件应位于 /etc/
.
如果你读到这里仍然不知道 $prefix
在哪里(即它不仅仅是空白或 /usr/local
)或者为什么你的 /etc/gitattributes
没有被阅读,你可以使用 strace
或类似的工具来查看 git 正在检查的所有地方。 Strace 在 stderr 上打印了大量的调试信息,所以使用 2>&1
并过滤它,正如我在下面所做的那样,使用 grep
。我为示例选择的 git 命令使用属性文件,因为 --stat
会根据 -diff
属性更改,但是您尝试使用的任何 git 命令 运行到时候应该没问题。
例如,使用 SCL 在 RHEL 上安装更新的 git,您可能会得到这样的结果:
$ strace -f git log --stat -1 2>&1 | grep --color 'open.*attr'
open("/opt/rh/rh-git218/root/usr/etc/gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/home/username/.config/git/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".git/info/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
。 . .这表明这里的 $prefix 是 /opt/rh/rh-git218/root/usr
.
Strace 的 -f
在这里不是必需的,但是如果您不知道也不关心某些命令是否会 fork,首先添加 -f
可以消除您的机会不会看到您要查找的内容。