我正在用一大堆文件初始化一个新的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 {} +
答案 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 --cached
和git commit --amend
)。
在提交前阶段,通过观察未跟踪文件列表并继续使用git lfs track
和git 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