如何为子文件夹配置不同的 Git LFS 设置?

问题描述 投票:0回答:1

我想在存储库范围内为某种文件类型启用Git LFS,但在选定的子文件夹中禁用它,即在Git存储库中完成LFS的模块化管理。

正如https://git-scm.com/docs/gitattributes所指出的,特别是https://git-scm.com/docs/gitattributes#_examples,这应该可以通过配置专用

.gitattributes来实现
相应文件夹中的文件。

但是,它并不像方面那样工作。如果在存储库的根文件夹中启用了 LFS,则在子文件夹中禁用它不会产生任何影响。相反,在顶层禁用它并在子文件夹中启用它也可以。

我创建了一个测试存储库,其中包含不同级别的三个

.gitattributes
文件

TEST-PARTIAL-LFS
│   .gitattributes
│
├───lfs
│       .gitattributes
│       file_01.mat
│
└───no-lfs
        .gitattributes
        file_02.mat

lfs/.gitattributes
的内容如下所示(启用lfs):

*.[mM][aA][tT] filter=lfs diff=lfs merge=lfs -text

no-lfs/.gitattributes
的内容如下所示(禁用lfs):

*.[mM][aA][tT] -text -diff -merge

然而,行为最终是由顶层控制的

.gitattributes
- 但不一致。

如果我在顶级文件中使用禁用模式

*.[mM][aA][tT] -text -diff -merge

然后

file_01.mat
被添加到 LFS,而
file_02.mat
则不是 - 如方面所述。

如果我在顶级文件中使用启用模式

*.[mM][aA][tT] filter=lfs diff=lfs merge=lfs -text

然后将

file_01.mat
添加到 LFS 并且
file_02.mat
too。这里,禁用本地模式被忽略。

有什么提示吗?

没有

$GIT_DIR/info/attributes

我使用

git lfs ls-files
来检查LFS状态。 我用
git version 2.45.2.windows.1

git git-lfs
1个回答
0
投票

当您在顶级文件(*.mat filter=lfs)中使用

启用模式
和在no-lfs/.gitattributes
*.mat -text -diff -merge
)中使用
禁用模式
时,您不会禁用
filter
属性,因此它是从顶级继承的
.gitattributes
。您可以使用
git check-attr
来查看它:

$ git check-attr -a no-lfs/file_02.mat
no-lfs/file_02.mat: diff: unset
no-lfs/file_02.mat: merge: unset
no-lfs/file_02.mat: text: unset
no-lfs/file_02.mat: filter: lfs

filter
设置为
lfs
。 您需要在
no-lfs/.gitattributes
中取消设置:

$ echo "*.[mM][aA][tT] -text -diff -merge -filter" >no-lfs/.gitattributes 

$ cat no-lfs/.gitattributes   
*.[mM][aA][tT] -text -diff -merge -filter

$ git check-attr -a no-lfs/file_02.mat
no-lfs/file_02.mat: diff: unset
no-lfs/file_02.mat: merge: unset
no-lfs/file_02.mat: text: unset
no-lfs/file_02.mat: filter: unset

取消设置!

© www.soinside.com 2019 - 2024. All rights reserved.