git lfs pull是否可以忽略某些文件/文件夹?

23

简短问题: 是否可以配置Git使得普通的Git pull命令忽略一些文件?

问题描述: 我有一个包含一些大型数据文件(使用Git LFS存储)的代码仓库。

虽然一些工作在数据文件上的开发人员需要更新这些文件的版本,但其他开发人员只需要文件,但不一定需要最新版本。

他们确实需要更新后的代码版本。而且数据文件与代码位于同一代码仓库中。

我希望设置一种方式,使得普通pull操作不会更新数据文件。

  • 我知道可以进行不从LFS下载文件的pull操作,但这将用指针文件替换文件,而我需要先前版本的文件。
3个回答

21

我看到了这篇文档,虽然没有测试过,但希望它能对你有所帮助:


包含和排除

你可以配置 Git LFS 只获取仓库中某些路径下的引用所需的对象,或者排除仓库中的某些路径,以减少下载不需要使用的内容所需的时间。

在 gitconfig 中,将 lfs.fetchinclude 和 lfs.fetchexclude 设置为逗号分隔的路径列表,以包括 / 排除在获取时使用(通配符匹配方式与 gitignore 相同)。 只有那些被 lfs.fetchinclude 匹配且未被 lfs.fetchexclude 匹配的路径才会为其获取对象。

示例:

  • git config lfs.fetchinclude "textures,images/foo*"

    这将仅获取textures文件夹中引用的对象,以及images文件夹中名为foo*的文件中引用的对象。

  • git config lfs.fetchinclude "*.jpg,*.png,*.tga"

    仅获取 JPG/PNG/TGA 文件,无论其在仓库中的位置在哪里。

  • git config lfs.fetchexclude "media/reallybigfiles"

    不获取位于 media/reallybigfiles 文件夹中引用的任何 LFS 对象,但获取其它所有对象。

  • git config lfs.fetchinclude "media"
    git config lfs.fetchexclude "media/excessive"

    只获取“media”文件夹中的 LFS 对象,但排除它的一个子文件夹中的对象。


3
注意:如果您要全新克隆一个仓库,可以使用git lfs clone repo.git --include="includes" --exclude="excludes" - bejado
2
这个答案似乎已经过时了。我得到的警告是:“'git lfs clone'已被弃用,并且不会使用来自'git clone'的新标志进行更新” - 是否有一种方法可以在正常的git clone中排除它? - f1lt3r
7
您可以按照以下方式操作: git clone --config lfs.fetchinclude='/path/to/includes/**/*' repo.git - Lars Schneider
请注意,对于 fetchincludefetchexclude,现在更倾向于通过使用 git config -f .lfsconfig lfs.fetchexclude "your_filters" 将它们放置在 .lfsconfig 文件中。 - Mark P.

5
如果你想要忽略所有的git lfs文件:
export GIT_LFS_SKIP_SMUDGE=1

在你克隆/拉取之前

0

git checkout patch (choose files to checkout)

我能想到的唯一方法就是使用部分检出。

git checkout -p

这将允许您手动选择要检出的文件。

enter image description here


无法工作。 这个标志不是表示忽略远程更改,而是忽略本地更改吗? - Ophir Yoktan

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