我正在用大量文件初始化一个新的 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 {} +
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
要获取存储库中所有文件的列表:
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
git-lfs-migrate,例如像这样列出所有大于 100kB 的非 LFS 文件:
git lfs migrate info --everything --above=100kB --pointers=ignore