从 git 跟踪中删除文件夹

Posted

技术标签:

【中文标题】从 git 跟踪中删除文件夹【英文标题】:Remove a folder from git tracking 【发布时间】:2014-08-09 00:47:14 【问题描述】:

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

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

然后我添加了 .gitignore 的路径

/wordpress/wp-content/uploads

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

我做错了什么?

我也试过

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

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

【问题讨论】:

Deleted 并不意味着 git 会删除你的文件。但是,如果您使用reset --hard,它会。 正如@keltar 提到的,提交不会导致您的文件被删除。它将提交它们的删除从 Git,但您的工作副本仍将包含它们。但是,如果您 pull 在其他地方提交这些文件从新系统中删除。 查看跟踪文件列表git ls-files 【参考方案1】:

如果文件被提交并推送到 github 那么你应该运行

git rm --fileName

git ls-files 确保文件已被删除或取消跟踪

git commit -m "UntrackChanges"

git push

【讨论】:

【参考方案2】:

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

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

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

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

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

【讨论】:

谢谢!!! Git 让我发疯,没有忽略 eclipse .metadata 文件夹。按照你的步骤使用 eclipse .metadata 文件夹,它终于奏效了。【参考方案3】:

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

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

使用git rm --cached 不利于协作。更多细节在这里:How to stop tracking and ignore changes to a file in Git?

【讨论】:

这是一个非常优雅的解决方案!递归路径技巧拯救了我的一天。谢谢!【参考方案4】:

这对我有用:

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

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

【讨论】:

unknown option 'ignore unmatched' 如果目录为空,这是一个重要标志,谢谢! 如果您也想从目录中删除某些文件扩展名,这非常有用:git rm -r --cached --ignore-unmatch .idea/*.xml【参考方案5】:

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

问题

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

回答

第 1 步。将文件夹路径添加到您的存储库的根 .gitignore 文件中。

path_to_your_folder/

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

git rm -r --cached path_to_your_folder/

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

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

【讨论】:

快速提问,文件夹路径必须是完整路径吗?还是只是以 git 存储库为基础的路径? 我相信这是完整的路径,但不记得了。 “并且从这个 repo 中提取的人将从他们的树中删除文件”我可以防止这种情况吗? 这正确地从分支上的跟踪中删除了我的文件,但在合并后删除了它们! 对我来说仍然存在。另外 - 我应该在提交文件夹中的文件时取消选择这些文件吗?我尝试了两种方式。如果取消选择,则不允许推送,但是我在另一个应该跟踪的文件中更改了一个字符。仍然没有帮助【参考方案6】:

来自 git 文档:

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

$ git rm --cached readme.txt

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

【讨论】:

OP 已经尝试过--cached-r 选项用于“递归”,应包含在此实例中。 我发现这很有用。我正在寻找如何在文件夹上执行此操作,然后查看在文件上执行此操作的方法。我正在标记这条评论。

以上是关于从 git 跟踪中删除文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何从当前 Git 工作树中删除本地(未跟踪)文件

如何从Git跟踪文件中删除Redis文件dump.rdb

如何从从 git 克隆的项目中删除版本跟踪?

git - 移除文件以及取消对文件的跟踪

在 VSCode 中保存文件会删除 git repo 中的所有跟踪文件

明确删除 GIT 中 .DS_Store 文件的跟踪 [重复]