从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中文件的更改?