我正在用一大堆文件初始化一个新的Git仓库.回购正在使用Git LFS.我想确保在我第一次提交之前告诉LFS跟踪应该处理的所有文件.
我看到git lfs ls-files它将列出LFS跟踪的所有文件.但是,(a)我想要相反:repo中未被LFS跟踪(并且在其中.gitignore)的所有文件,以及(b)此命令仅在您提交文件后才有效.
有没有人有一些git-fu或Ubuntu-fu列出repo中所有未被忽略的文件,并且与.gitattributeGit LFS使用的各种文件中的轨道模式不匹配?
我最接近的是这个命令,它将repo中的文件列出超过100kB,然后手动扫描所有文件,并希望我用跟踪模式覆盖它们.
find . -type f -exec du -Sha -t 100000 {} +
Run Code Online (Sandbox Code Playgroud)
尽管问题涉及那些文件不被COMMITED,让我提出一个解决方案中列出了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
Run Code Online (Sandbox Code Playgroud)
之后你可以编辑你的提交(git rm --cached和git commit --amend)如果你注意到一个潜入的文件......
在提交前阶段,通过观察未跟踪的文件列表并连续使用来进行,git lfs track并且git add应该是非常安全的.
让我给出一些想法:
要获取存储库中所有文件的列表:
find . -type f > all.txt
Run Code Online (Sandbox Code Playgroud)
要获取 LFS 将跟踪的所有文件的列表:
set -f; for f in $(cat .gitattributes | cut -d ' ' -f 1); do find . -name $f; done > lfs.txt
Run Code Online (Sandbox Code Playgroud)
要获取 LFS 不会跟踪的所有文件的列表:
grep -f lfs.txt -F -w -v all.txt > non-lfs.txt
Run Code Online (Sandbox Code Playgroud)