列出Git LFS未跟踪的文件

时间:2017-03-22 22:29:53

标签: git git-lfs

我正在用一大堆文件初始化一个新的Git仓库。回购正在使用Git LFS。我想确保在我第一次提交之前告诉LFS跟踪应该处理的所有文件。

我看到git lfs ls-files将列出LFS跟踪的所有文件。但是,(a)我想要相反:repo中未被LFS跟踪的所有文件(并且在.gitignore中),以及(b)此命令仅适用于after you have committed files

有没有人有一些git-fu或Ubuntu-fu来列出repo中所有未被忽略且与Git LFS使用的各种.gitattribute文件中的轨道模式不匹配的文件? / p>

我最接近的是这个命令,它将repo中的文件列出超过100kB,然后手动扫描所有文件,并希望我的跟踪模式覆盖它们。

find . -type f -exec du -Sha -t 100000 {} +

2 个答案:

答案 0 :(得分:5)

即使问题涉及已提交的文件,让我建议一个解决方案,列出git跟踪的文件,但不提交git-lfs 提交后,你可以通过将git(git ls-files)跟踪的文件列表与git-lfs(git lfs ls-files | cut -d' ' -f3-)跟踪的文件列表连接起来,然后只获取此列表中唯一的文件:

{ git ls-files && git lfs ls-files | cut -d' ' -f3-; } | sort | uniq -u

如果您注意到潜入的文件,您可以编辑您的提交(git rm --cachedgit commit --amend)。

在提交前阶段,通过观察未跟踪文件列表并继续使用git lfs trackgit add继续进行应该非常安全。

答案 1 :(得分:1)

让我提出一些想法:

获取存储库中所有文件的列表:

find . -type f > all.txt

获取LFS将跟踪的所有文件的列表:

set -f; for f in $(cat .gitattributes | cut -d ' ' -f 1); do find . -name $f; done > lfs.txt

获取LFS不会跟踪的所有文件的列表:

grep -f lfs.txt -F -w -v all.txt > non-lfs.txt