unix 我应该把全局'gitattributes'文件放在哪里?

khbbv19g  于 2023-08-04  发布在  Unix
关注(0)|答案(3)|浏览(217)

我认为有a way(尽管缺乏文档)来全局设置Git attributes;但我不清楚在哪里放置必要的gitattributes文件。instructions说他们属于

$(prefix)/etc/gitattributes

字符串
$(prefix)在哪里?特别是,OS X在哪里(Git在/usr/local/git/bin/git中)?或者(或者)~/.gitattributeswork

b4wnujal

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 config --global core.attributesfile <path>

字符串
将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/中。

l0oc07j2

l0oc07j22#

如果你读到这里,仍然不知道$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)

字符串
. . .这表明这里的$前缀是/opt/rh/rh-git218/root/usr
Strace的-f在这里是不必要的,但是如果你不知道也不关心某个命令是否会分叉,那么首先添加-f可以消除你看不到你正在寻找的东西的机会。

4zcjmb1e

4zcjmb1e3#

您也可以通过新的环境变量引用全局.gitattribute

git var GIT_ATTR_GLOBAL

字符串
在Git 2.42(2023年第3季度)中,添加更多的“git var”(man),以便工具匠了解Git通过配置或硬编码默认值配置的各种位置。
请参阅commit 4db16f5(2023年6月27日)。
请参阅brian m. carlson ( bk2204 )commit ed773a1commit 576a37fcommit 15780bbcommit cdd489ecommit f74c90dcommit 1e65721commit 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]文件的路径。

相关问题