我有一些文件,例如一个error_log
,其中一些可能在添加到文件之前意外添加到 git,.gitignore
所以我想知道如何从 Git 存储库中删除所有具有此名称的文件实例?
请注意,我希望它们留在服务器上,因此我将使用该--cached
选项。
find -name "error_log" | xargs git rm --cached
应该做的伎俩
您应该使用filter-branch
从您的提交历史记录(所有提交)中完全擦除它:
git filter-branch --index-filter --prune-empty "find . -name error_log | xargs --no-run-if-empty git rm --cached --ignore-unmatch"
(此处的解决方案 5或GitHub 的删除敏感数据)
笔记!这样,您将丢失“error_log”的所有旧版本!只有处于最后状态的文件才可用。如果您只想从 repo 中排除文件而不是在将来跟踪它,请使用 @blue112 的答案
cd git-项目文件
读我的时候;做 git rm --cached $PWD/$i ; 完成 < .gitignore
然后提交
这样,您就可以从当前提交中删除这些文件。
如果你想从历史中删除,你将不得不做更多的事情。因此,如果您需要这样做,请在下方评论。
你说:
我有一些文件,例如一个是 error_log ,其中一些可能在添加到.gitignore文件之前意外添加到 git ...
所以脚本的作用是逐行读取 .gitignore 文件,因此脚本运行一个 while 循环,其中
$i 是一条线
$PWD 是当前目录的路径
所以 $PWD/$i 是 .gitignore 文件每一行中文件的路径。
它为 .gitignore 中的每一行运行 git rm --cached $PWD/$i。
如果文件 $PWD/$i 没有添加到 git 中(即,如果文件不在你的 error_logs 中),它没有害处。如果它是您的 error_logs 之一,那么它会从缓存中删除该文件。
确保先将文件添加到 .gitignore 然后运行脚本