列出 Git LFS 未跟踪的文件

问题描述 投票:0回答:3

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

我看到

git lfs ls-files
将列出 LFS 跟踪的所有文件。但是,(a) 我想要相反的情况:存储库中所有不被 LFS 跟踪的文件(并且位于
.gitignore
中),并且 (b) 此命令仅在您提交文件后才有效。

是否有人有一些 git-fu 或 Ubuntu-fu 来列出存储库中未被忽略且与 Git LFS 使用的各种

.gitattribute

 文件中的轨道模式不匹配的所有文件?


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

find . -type f -exec du -Sha -t 100000 {} +
    
git git-lfs
3个回答
13
投票
即使问题涉及那些

not已提交的文件,让我建议一个解决方案来列出 git 跟踪的文件,而不是 git-lfs after commit,您可以通过连接 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 --cached

git commit --amend
)...

在预提交阶段,通过查看未跟踪的文件列表并连续使用

git lfs track

git add
 来继续应该是相当安全的。

请注意,规范中不将空文件视为 LFS 对象,因此它们不会被

git lfs ls-files

 列出
    


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
    

0
投票
您可以在“信息”模式下使用

git-lfs-migrate,例如像这样列出所有大于 100kB 的非 LFS 文件:

git lfs migrate info --everything --above=100kB --pointers=ignore
    
© www.soinside.com 2019 - 2024. All rights reserved.