1

我有一些文件,例如一个error_log,其中一些可能在添加到文件之前意外添加到 git,.gitignore所以我想知道如何从 Git 存储库中删除所有具有此名称的文件实例?

请注意,我希望它们留在服务器上,因此我将使用该--cached选项。

4

3 回答 3

1
find -name "error_log" | xargs git rm --cached

应该做的伎俩

于 2016-03-18T11:02:01.350 回答
0

您应该使用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 的答案

于 2016-03-18T11:07:05.793 回答
0

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 然后运行脚本

于 2016-03-18T11:26:11.523 回答