我收集有(尽管缺乏文档)一种全局设置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那么首先添加可以消除您看不到所需内容的机会。