如何将单个文件添加到GIT LFS?

62

我如何将单个文件添加到GIT LFS中?

大多数示例都展示了添加指定文件到LFS的模式。然而,我希望只添加单个文件。例如,如果我执行下面这条命令:

git lfs track "file.bin"

这将跟踪所有名为file.bin的文件,无论它们在哪个目录中。

我考虑将排除过滤器(!模式)添加到.gitattributes中,以排除所有目录,但不支持该操作。

到目前为止,我做得最好的是跟踪我想要添加的文件模式,添加文件,然后删除该文件模式的跟踪。这有点麻烦。还有更好的方法吗?

我想表达的文件模式是$ROOT_OF_GIT_REPO/file.bin,但我缺乏表达$ROOT_OF_GIT_REPO部分的方法。

3个回答

43

用法:

git lfs track --filename [文件路径]

来源:git lfs track --help

--filename

将参数视为字面文件名,而不是模式。 写入.gitattributes文件时,文件名中的任何特殊 glob 字符都将被转义。

此选项自 LFS 扩展的 v2.9.0 版本以来可用(拉取请求)。您可以检查本地版本:git lfs version


这可能是一个较新的选项,因为在 git version 2.17.1 中出现了 Error: unknown flag: --filename Sorry, no usage text found for "track" 的错误提示。 - Mike T
这与LFS扩展的版本有更多关系:git lfs version - Pamphile
对我来说,这似乎是首选答案。 - Mr. Boy
这种方法也适用于 git lfs migrate import 吗? - undefined

24

请包含文件的路径,而不仅仅是文件名。


4
带斜杠的文件路径:/file.txt - Mark Adelsberger
很抱歉,那样做不起作用。文件模式/file.bin匹配任何名为file.bin的文件,包括子目录中的文件。我感觉需要一个特殊字符来标记文件模式应该从GIT仓库的根目录开始。 - user2746401
2
在路径名的开头使用前导斜杠可以匹配路径名的开头。例如,'/*.c' 可以匹配 'cat-file.c' 但不能匹配 'mozilla-sha1/sha1.c'。 - Mark Adelsberger
2
哦,还有https://git-scm.com/docs/gitattributes - “与.gitignore文件(参见gitignore [5])中的模式匹配路径的规则相同,但有一些例外...”(不用担心,这些例外不会影响我们讨论的内容。) - Mark Adelsberger
我再玩了一下,发现是我的错误观察。@Mark Adelsberger 感谢您一直关注这个问题!您能把您的评论添加到答案中吗,这样我就可以标记它为正确答案了吗? - user2746401
显示剩余5条评论

9

在你的代码库中,你可以指定任何文件名或路径。你不必局限于使用文件扩展名。你还可以使用 git lfs track 'assets/*' 来跟踪特定目录,使用 git lfs track 'assets/**/*' 来跟踪整个目录树。你也可以使用 git lfs track path/to/file 来跟踪特定的单个文件,这将只跟踪该文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接