【问题标题】:Git LFS track folder recursivelyGit LFS 递归跟踪文件夹
【发布时间】:2016-03-03 10:20:08
【问题描述】:

是否可以使用 Git LFS 递归跟踪文件夹及其子文件夹中包含的所有文件?

我想做这样的事情:

git lfs track myfolder/*

【问题讨论】:

  • 好问题。事实上,这对于这个社区来说可能是一个广泛有用的文档。有时,理解 Git LFS 可能是一个挑战。感谢您的努力和描述。

标签: git git-lfs


【解决方案1】:

使用git lfs track "myfolder/**",带引号以避免shell 已经扩展了模式。 track 命令所做的只是写入.gitattributes,而.gitattributes 又使用(几乎)与.gitignore 相同的模式匹配规则,请参见PATTERN FORMAT 描述。

【讨论】:

  • 啊,你可能是shell扩展的受害者,即myfolder/**在传递给Git之前被shell扩展了。我已经更新了我的答案以添加引号,这应该可以解决这个问题。
  • .gitattributes 不遵循(全部)与上述 git-scm 链接记录的相同模式匹配规则,否则“myfolder/**”可以替换为“myfolder/”,与声明“foo/ 将匹配一个目录 foo 和它下面的路径”。我认为(即未经证实的)“myfolder/”在.gitignore 中有效,因为忽略过程会通过文件系统下降,在匹配时停止,但.gitattributes 会根据预先存在的列表进行检查。如果您发现不同,请使用 git/git-lfs 版本添加评论来扭转这一点。
  • 是的,这对我有用,根据 cmets 也适用于其他人。如果您使用的是 Windows,请注意该命令必须从 Git Bash 使用,而不是从 cmd
  • 我必须使用git lfs track "myfolder/**/*" 才能使其工作。
  • 我在 MacOS 上使用不带引号的 had to use git lfs track myfolder/**/*
【解决方案2】:

通过这种方式,您可以跟踪任何包含任何子文件夹的文件夹。您想递归跟踪文件夹数为“n”和“m”的文件夹 子文件夹的数量。我建议这样做。

  1. 使用以下命令查找所有文件扩展名
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u  
  1. 然后创建一个 .gitattribute 文件并添加 git lfs track 语法。此命令会为您生成,它会跟踪所有文件及其扩展名并创建 lfs 跟踪语法。
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u | awk '{print $1" filter=lfs diff=lfs merge=lfs -text"}' | sed 's/^/*./'
  1. 将粘贴输出复制到 .gitattribute 文件并提交。

它适用于

  1. 任意数量的文件和文件夹。
  2. 包含大量小文件的大型 repo,这使得 repo 非常大。
  3. 任意数量的文件夹和子文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2018-01-25
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2014-08-09
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多