你的问题术语有些模糊。在Git上下文中,“全局”通常意味着“用户级别”; 换句话说,全局设置会影响到一个特定用户(当前用户)的所有存储库。相比之下,系统范围设置会影响到机器上所有用户的所有存储库。
(我只是为了完整性而提及这个。)
根据《Pro Git book》的相关部分所述,
如果您只想影响单个存储库(即为该存储库分配特定于某个用户工作流程的文件属性),则应将属性放置在
$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>
<path>
以获取全局 gitattributes 文件,例如 ~/.gitattributes
,您需要进行以下操作。
这自然引出了一个问题:所有用户的属性应该被放置在
$(prefix)/etc/gitattributes
文件中。
请参见 $(prefix)/etc/gitconfig 上的 $(prefix) 是什么? 获取答案。除非您给定了自定义的非空值,否则默认情况下[...] 但是
$(prefix)
在哪里?
$(prefix)
不会展开任何内容;因此,您的系统级 gitattributes
文件应该位于 /etc/
中。/usr/local/git/etc
目录,似乎被gitattributes
所尊重(至少被/usr/local/git/bin/git
所尊重),但没有/etc/git
。还有一个~/.config/git
目录,其中包含GitHub似乎生成的忽略文件。我不清楚所有这些如何配合使用。 - orome/usr/local/git/
;如果是这样,那么 /usr/local/git/etc/gitattributes
将是您的系统范围 gitattributes;请参阅我的答案中的系统范围 gitattributes 部分。至于 ~/.config/git
,那是您的全局 gitattributes;请参阅我的答案中的全局(用户级)gitattributes 部分。 - jub0bsetc
是否为系统范围内(或者至少是特定 Git 的系统范围内),而各种$XDG_CONFIG_HOME/git/...
或~/.configs/git/..
则无关紧要(对于gitignore
也是如此)如果我已经将core.attributesfile
(或core.excludesfile
)设置为其他内容。例如,如果我将它设置为/.gitattributes
(即~/.gitignore
),那么它就会用于我的“全局”(用户级)设置。 - orome$prefix
在哪(也就是不只是空白或 /usr/local
),或者为什么你的 /etc/gitattributes
没被读取,你可以使用 strace
或类似的工具来查看 git 正在检查的所有地方。 Strace 会在 stderr 上打印大量的调试信息,所以像下面示例中那样使用 2>&1
并用 grep
过滤它即可。我选择了一个带有 attributes 文件的 git 命令作为示例,因为它使用了 --stat
,该选项会基于 -diff
属性进行更改,但你试图运行的任何 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
以避免错过所需查看的内容。
.gitattribute
文件。git var GIT_ATTR_GLOBAL
在 Git 2.42(2023 年第三季度)中,为工具开发人员增加更多 "git var
"(man),以便了解 Git 配置的各个位置,无论是通过配置还是硬编码的默认值。
peff
)进行。bk2204
)进行。gitster
--合并于提交 89d62d5,2023年7月4日)
var
:添加属性文件位置
Signed-off-by: brian m. carlsongitattributes
文件。我们不能指望所有调用Git的用户都能直观地知道Git分发商或用户配置这些位置的方式,因此添加一些条目以便我们确定它们的位置。
如果指定了GIT_ATTR_NOSYSTEM
环境变量,则遵循该变量。
以一种可以从var代码中重用它们的方式公开访问器函数。
为了使我们的路径在Windows上保持一致,并且使用与“git rev-parse
”(man)中使用的路径形式相同,让我们在返回路径之前对其进行规范化。
这将导致使用斜杠的Windows风格路径,这样可以方便地使我们的测试在各个平台上以一致的方式运行。
请注意,这需要释放一些值,因此让我们添加一个关于是否需要释放该值的标志,并相应地使用它。
git var
现在在其man page中包含以下内容:
GIT_ATTR_SYSTEM
系统linkgit:gitattributes[5]文件的路径,如果启用了该文件。
GIT_ATTR_GLOBAL
全局(每个用户)linkgit:gitattributes[5]文件的路径。