我收集有(尽管缺乏文档)一种全局设置Git 属性的方法;但我不清楚在哪里放置必要的gitattributes
文件。说明说他们属于
$(prefix)/etc/gitattributes
但在哪里$(prefix)
?特别是,对于 OS X(带有 Git /usr/local/git/bin/git
),它会在哪里?交替(或另外)会~/.gitattributes
起作用吗?
我收集有(尽管缺乏文档)一种全局设置Git 属性的方法;但我不清楚在哪里放置必要的gitattributes
文件。说明说他们属于
$(prefix)/etc/gitattributes
但在哪里$(prefix)
?特别是,对于 OS X(带有 Git /usr/local/git/bin/git
),它会在哪里?交替(或另外)会~/.gitattributes
起作用吗?
您的问题的术语有一些歧义。在 Git 上下文中,“全局”通常表示“用户级别”;换句话说,全局设置会影响一个特定用户(活动用户)的所有存储库。相反,系统范围的设置会影响机器所有用户的所有存储库。
(我只是为了完整性而提到这一点。)
如果您希望仅影响单个存储库(即,将属性分配给特定于该存储库的一个用户工作流的文件),则应将属性放置在
$GIT_DIR/info/attributes
文件中。
$GIT_DIR
通常会扩展为<path-to-repo-root-directory>/.git
.
应该影响单个用户的所有存储库的属性应该放在
core.attributesfile
配置选项指定的文件中 [...]。它的默认值为$XDG_CONFIG_HOME/git/attributes
. 如果$XDG_CONFIG_HOME
未设置或为空,$HOME/.config/git/attributes
则改为使用。
您还可以运行以下命令,
git config --global core.attributesfile <path>
将 Git 指向<path>
全局 gitattributes 文件的自定义路径,例如~/.gitattributes
.
系统上所有用户的属性都应该放在
$(prefix)/etc/gitattributes
文件中。
这自然引出了一个问题:
[...] 但在哪里
$(prefix)
?
请参阅$(prefix)/etc/gitconfig 上的 $(prefix) 是什么?寻求答案。除非您分配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
在这里不是必需的,但如果您不知道也不关心某些命令是否会分叉,-f
那么首先添加可以消除您看不到所需内容的机会。