我一直遇到这样一种情况:我们团队中的某个人在没有先向他们的项目添加 .gitignore 的情况下推送初始提交。这会导致一堆文件最终出现在我们不想跟踪的存储库中。
git ls-files -i --exclude-from=.gitignore
给我一个被 .gitignore 忽略的文件列表
和
git rm --cached <file>
让我一次从存储库中删除一个文件,但将它们保留在我的工作目录中(我想要的)
有没有办法可以通过管道从 ls-files
传输文件列表?至 rm --cached
(或者其他一些方法可以让我从我的存储库中删除跟踪的、忽略的文件)?
我们的一位团队成员编写了一个使用正则表达式执行此操作的 shell 脚本,但我正在寻找仅命令行解决方案(如果存在的话)。
最佳答案
你可以试试:
git rm --cached $(git ls-files -i --exclude-from=.gitignore)
(遵循与适用于已删除文件的相同想法 “git remove files which have been deleted ”,或“git: how to add/commit removals made via vanilla rm? ”,或“Removing multiple files from a Git repo that have already been deleted from disk ”)。
或者:一个简单的管道也可以工作:
git ls-files -i --exclude-from=.gitignore | xargs -0 git rm --cached
关于git - 从 repo 中删除跟踪的忽略文件,但不在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799668/