git - 从 repo 中删除跟踪的忽略文件,但不在本地

标签 git gitignore

我一直遇到这样一种情况:我们团队中的某个人在没有先向他们的项目添加 .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/

相关文章:

git - 忽略特定目录中的所有内容,但排除被忽略目录中的某些文件

git - 每个新 Android Studio 项目附带的默认 .gitignore 是否足够好?

Git 冲突——显示误报

php - 接收后仅适用于用户ROOT

Gitignore 不适用于 .xml 文件和/目标目录

php - 使用 Git ‘去同步化’一个 PHP 配置文件

Visual Studio 中的 Git Hook ?

linux - 可以让多个 git 用户以 root 身份登录吗?

git - 了解 Mercurial、Bazaar 等的内部结构?

git - 忽略来自 git commit 的文件,但保护它不被清理