从git跟踪中删除一个文件夹

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

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

之后我添加了.gitignore的path

 /wordpress/wp-content/uploads 

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

我究竟做错了什么?

我也试过了

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

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

我遇到这个问题,同时谷歌search“git删除文件夹跟踪”。 OP的问题使我想到了答案。 我在这里为子孙后代总结。

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

回答

步骤1.将文件夹path添加到您的.gitignore.gitignore文件。

 path_to_your_folder/ 

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

 git rm -r --cached path_to_your_folder/ 

第3步。把你的改变推到你的git仓库。

从Git的angular度来看,这个文件夹将被视为“已删除”(即它们在过去的历史中,而不是在最近的提交中,而从这个repo中拉出来的人将从树中删除这些文件),但是留在你的工作目录因为你已经使用了 – --cached

从git文档:

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

 $ git rm --cached readme.txt 

那么也许不包括“-r”?

这适用于我:

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

--ignore-unmatch在这里非常重要,没有这个选项,git会在第一个不在索引中的文件上以错误的方式退出。

忘记目录recursion添加/*/*到path:

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

使用git rm --cached不适合协作。 更多细节在这里: 如何停止跟踪并忽略Git中文件的更改?