【发布时间】:2016-06-05 13:15:21
【问题描述】:
在完成所有工作后,我将 .gitignore 添加到我的项目中。现在我想运行如下命令:
git rm --cached *everything_listed_in_gitignore*
如何做到这一点?提前谢谢你。
【问题讨论】:
在完成所有工作后,我将 .gitignore 添加到我的项目中。现在我想运行如下命令:
git rm --cached *everything_listed_in_gitignore*
如何做到这一点?提前谢谢你。
【问题讨论】:
我总是使用以下行来删除我的.gitignore 中列出的文件:
grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
这将在 .gitignore 中找到不匹配的行(-v grep 选项)正则表达式 ^(#|\$) 匹配以 # (cmets) 开头的行或空行。
然后sed 将删除行首的正斜杠/。
使用xargs 将结果传递给rm -f,您可以将其替换为git rm --cached
注意:
您的.gitignore 文件可以包含*.tmp 之类的条目,以忽略整个项目中的所有.tmp 文件。上述命令只会从根目录中删除 *.tmp 文件。只有完整路径才会被正确处理。
【讨论】:
grep 上缺少 -P 选项,请使用 brew install grep --with-default-names 安装一个。
我从https://ardalis.com/how-to-make-git-forget-tracked-files-in-gitignore 发现了另一种在任何操作系统中都能更好地工作的方法。
向.gitignore添加新规则后
git rm -r --cached .
git add .
基本上,它会删除所有内容并重新添加所有内容。添加时Git会忽略基于.gitignore的文件
【讨论】:
还有一个较短的版本,答案取自here。
您还可以根据您的 .gitignore 从存储库中删除文件,而无需从本地文件系统中删除它们:
git rm --cached `git ls-files -i -X .gitignore`
或者,在 Windows Powershell 上:
git rm --cached $(git ls-files -i -X .gitignore)
【讨论】: