585

我需要从跟踪中排除文件夹(名称上传)。我试着跑

git rm -r --cached wordpress/wp-content/uploads

之后我添加了 .gitignore 的路径

/wordpress/wp-content/uploads

但是当我运行时,git status它们显示为已删除。如果我尝试提交更改,文件将被删除,而不仅仅是从跟踪中删除。

我究竟做错了什么?

我也试过

git update-index --assume-unchanged <file>

但这似乎只取消跟踪文件。但我需要从跟踪中删除整个文件夹(包括子文件夹)。

4

6 回答 6

1224

我在谷歌搜索“git remove folder from tracking”时遇到了这个问题。OP的问题引导我找到答案。我在这里为后代总结一下。

问题

如何从我的 git 存储库中删除一个文件夹而不从我的本地机器(即开发环境)中删除它?

回答

步骤 1. 将文件夹路径添加到您的 repo 的根.gitignore文件。

path_to_your_folder/

步骤 2. 从本地 git 跟踪中删除该文件夹,但将其保留在磁盘上。

git rm -r --cached path_to_your_folder/

步骤 3. 将您的更改推送到您的 git 存储库。

从 Git 的角度来看,该文件夹将被视为“已删除”(即它们在过去的历史记录中,但不在最新的提交中,并且从该 repo 中提取的人将从他们的树中删除文件),但保留在您的工作目录中因为你用过--cached

于 2015-05-20T21:46:22.763 回答
73

这对我有用:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch在这里很重要,如果没有该选项,git 将在第一个不在索引中的文件上出错并退出。

于 2017-08-18T11:57:49.400 回答
29

我知道这是一个旧线程,但我只想添加一点,因为标记的解决方案并没有为我解决问题(尽管我尝试了很多次)。

我实际上可以停止 git form 跟踪文件夹的唯一方法是执行以下操作:

  1. 备份本地文件夹并放在安全的地方。
  2. 从本地存储库中删除文件夹
  3. 确保清除缓存git rm -r --cached your_folder/
  4. 添加your_folder/到 .gitignore
  5. 提交更改
  6. 将备份添加回您的存储库

您现在应该看到该文件夹​​不再被跟踪。

不要问我为什么只清除缓存对我不起作用,我不是 Git 超级向导,但这就是我解决问题的方法。

于 2019-02-01T14:07:57.303 回答
21

要忘记目录递归添加/*/*到路径:

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*

使用git rm --cached不利于协作。此处有更多详细信息:如何停止跟踪并忽略 Git 中对文件的更改?

于 2017-10-03T15:44:21.027 回答
6

从 git 文档:

您可能想做的另一件有用的事情是将文件保留在工作树中,但将其从暂存区域中删除。换句话说,您可能希望将文件保留在硬盘上,但不再让 Git 跟踪它。如果您忘记在 .gitignore 文件中添加某些内容并且不小心将其暂存,例如大型日志文件或一堆 .a 编译文件,这将特别有用。为此,请使用 --cached 选项:

$ git rm --cached readme.txt

所以也许不包括“-r”?

于 2014-06-18T16:23:48.400 回答
4

如果文件已提交并推送到 github,那么您应该运行

git rm --fileName

git ls-files 确保文件被删除或未跟踪

git commit -m "UntrackChanges"

git push

于 2020-08-09T20:49:45.997 回答