我认为有a way(尽管缺乏文档)来全局设置Git attributes;但我不清楚在哪里放置必要的gitattributes
文件。instructions说他们属于
$(prefix)/etc/gitattributes
字符串$(prefix)
在哪里?特别是,OS X在哪里(Git在/usr/local/git/bin/git
中)?或者(或者)~/.gitattributes
work?
我认为有a way(尽管缺乏文档)来全局设置Git attributes;但我不清楚在哪里放置必要的gitattributes
文件。instructions说他们属于
$(prefix)/etc/gitattributes
字符串$(prefix)
在哪里?特别是,OS X在哪里(Git在/usr/local/git/bin/git
中)?或者(或者)~/.gitattributes
work?
3条答案
按热度按时间b4wnujal1#
全局vs全系统设置
你的问题的术语有些含糊。在Git上下文中,“全局”通常意味着“用户级”;换句话说,global 设置会影响 * 一个 * 特定用户(活动用户)的所有存储库。相比之下,* 系统范围 * 设置会影响一台计算机的 * 所有 * 用户的所有存储库。
仓库级gitattributes
(我只是为了完整性而提这个。)
根据relevant section of the Pro Git book,
如果您希望只影响单个存储库(即,将属性分配给特定于该存储库用户工作流的文件),则应将属性放置在
$GIT_DIR/info/attributes
文件中。$GIT_DIR
通常扩展到<path-to-repo-root-directory>/.git
。全局(用户级)gitattributes
根据relevant section of the Pro Git book,
应该影响单个用户所有存储库的属性应该放在
core.attributesfile
配置选项[...]指定的文件中。其默认值为$XDG_CONFIG_HOME/git/attributes
。如果$XDG_CONFIG_HOME
未设置或为空,则使用$HOME/.config/git/attributes
。也可以运行以下命令,
字符串
将Git指向全局gitattributes文件的自定义路径
<path>
,例如~/.gitattributes
。系统范围gitattributes
根据relevant section of the Pro Git book,
系统上所有用户的属性都应该放在
$(prefix)/etc/gitattributes
文件中。这自然引出了一个问题
[...]
$(prefix)
在哪里?请参阅What is $(prefix) on $(prefix)/etc/gitconfig?以获取答案。除非您为
prefix
指定了一个自定义的非空值,否则$(prefix)
默认情况下将扩展为零;因此,系统范围的gitattributes
文件应该驻留在/etc/
中。l0oc07j22#
如果你读到这里,仍然不知道
$prefix
在哪里(即,不只是空白或者/usr/local
)或者为什么你的/etc/gitattributes
没有被读取,你可以使用strace
或者类似的工具来查看git正在检查的所有地方。Strace在stderr上打印了大量的调试信息,因此使用2>&1
并过滤它,正如我下面所做的,使用grep
。我在这个例子中选择的git命令使用了一个属性文件,因为--stat
会根据-diff
属性而改变,但是你当时尝试运行的任何git命令都是可以的。例如,使用SCL在RHEL上安装了一个更新的git,你可能会得到这样的结果:
字符串
. . .这表明这里的$前缀是
/opt/rh/rh-git218/root/usr
。Strace的
-f
在这里是不必要的,但是如果你不知道也不关心某个命令是否会分叉,那么首先添加-f
可以消除你看不到你正在寻找的东西的机会。4zcjmb1e3#
您也可以通过新的环境变量引用全局
.gitattribute
:字符串
在Git 2.42(2023年第3季度)中,添加更多的“
git var
”(man),以便工具匠了解Git通过配置或硬编码默认值配置的各种位置。请参阅commit 4db16f5(2023年6月27日)。
请参阅brian m. carlson (
bk2204
)的commit ed773a1、commit 576a37f、commit 15780bb、commit cdd489e、commit f74c90d、commit 1e65721、commit d6546af(2023年6月27日)。(由Junio C Hamano --
gitster
--合并到commit 89d62d5,2023年7月4日)var
:添加属性文件位置签收人:布赖恩·卡尔森
目前,有一些程序希望在全局或系统级别读取和解析
gitattributes
文件。然而,这些文件的位置并不总是显而易见的,特别是对于系统文件,系统文件可能在编译时被硬编码,或者基于运行时前缀动态计算。
期望Git的所有调用者都能直观地知道Git分发者或用户在哪里配置了这些位置是不合理的,所以添加一些条目让我们可以确定他们的位置。
如果指定了
GIT_ATTR_NOSYSTEM
环境变量,请荣誉。以一种我们可以在var代码中重用访问器函数的方式公开它们。
为了使我们的路径在Windows上保持一致,并使用与“
git rev-parse
“(man)中使用的路径相同的形式,让我们在返回路径之前对路径进行规范化。这会导致使用斜杠的Windows样式路径,这对于使我们的测试在跨平台上以一致的方式运行非常方便。
请注意,这需要释放一些值,因此让我们添加一个关于是否需要释放值的标志并相应地使用它。
git var
现在在其手册页中包括:GIT_ATTR_SYSTEM
系统linkgit:gitattributes[5]文件的路径(如果已启用)。
GIT_ATTR_GLOBAL
全局(每个用户)linkgit:gitattributes[5]文件的路径。