列出Git LFS未跟踪的文件

bkkx9g8r  于 2022-12-25  发布在  Git
关注(0)|答案(2)|浏览(282)

我正在用一大堆文件初始化一个新的Git repo,这个repo使用的是Git LFS,我想确保在我第一次提交之前,我已经告诉LFS跟踪所有应该处理的文件。
我看到git lfs ls-files会列出所有被LFS跟踪的文件。然而,(a)我想要的正好相反:存储库中未被LFS跟踪的所有文件(并且在.gitignore中),以及(b)此命令仅适用于after you have committed files
有没有人有一些git-fu或Ubuntu-fu来列出repo中所有没有被忽略的文件,以及Git LFS使用的各种.gitattribute文件中的轨迹模式不匹配的文件?

  • 最接近的是这个命令,它列出了存储库中超过100 KB的文件,然后手动扫描所有文件,希望跟踪模式能覆盖这些文件。*
find . -type f -exec du -Sha -t 100000 {} +
li9yvcax

li9yvcax1#

尽管这个问题涉及到 * 没有 * 被提交的文件,我还是建议在提交后列出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应该是非常安全的。
请注意,规范不将空文件视为LFS对象,因此它们不会按git lfs ls-files列出

toiithl6

toiithl62#

让我给予一些想法:
获取存储库中所有文件的列表:

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

相关问题