我需要从跟踪中排除文件夹(名称上传)。我试着跑
git rm -r --cached wordpress/wp-content/uploads
之后我添加了 .gitignore 的路径
/wordpress/wp-content/uploads
但是当我运行 git status
时,它们显示为已删除。如果我尝试提交更改,文件将被删除,而不仅仅是从跟踪中删除。
我究竟做错了什么?
我也试过
git update-index --assume-unchanged <file>
但这似乎只取消跟踪文件。但我需要从跟踪中删除整个文件夹(包括子文件夹)。
reset --hard
,它会。
pull
在其他地方提交这些文件将从新系统中删除。
git ls-files
我在谷歌搜索“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 rm -r --cached --ignore-unmatch folder_name
--ignore-unmatch
在这里很重要,如果没有该选项,git 将在第一个不在索引中的文件上出错并退出。
unknown option 'ignore unmatched'
git rm -r --cached --ignore-unmatch .idea/*.xml
我知道这是一个旧线程,但我只想添加一点,因为标记的解决方案并没有为我解决问题(尽管我尝试了很多次)。
我实际上可以停止 git form 跟踪文件夹的唯一方法是执行以下操作:
备份本地文件夹并放在安全的地方。从本地仓库中删除文件夹 确保清除缓存 git rm -r --cached your_folder/ 将 your_folder/ 添加到 .gitignore 提交更改 将备份添加回您的仓库
您现在应该看到该文件夹不再被跟踪。
不要问我为什么只清除缓存对我不起作用,我不是 Git 超级向导,但这就是我解决问题的方法。
要忘记目录递归地添加 /*/*
到路径:
git update-index --assume-unchanged wordpress/wp-content/uploads/*/*
使用 git rm --cached
不利于协作。更多详细信息:How to stop tracking and ignore changes to a file in Git?
从 git 文档:
您可能想做的另一件有用的事情是将文件保留在工作树中,但将其从暂存区域中删除。换句话说,您可能希望将文件保留在硬盘上,但不再让 Git 跟踪它。如果您忘记在 .gitignore 文件中添加某些内容并且不小心将其暂存,例如大型日志文件或一堆 .a 编译文件,这将特别有用。为此,请使用 --cached 选项:
$ git rm --cached readme.txt
所以也许不包括“-r”?
--cached
。 -r
选项用于“递归”,应包含在此实例中。
如果文件已提交并推送到 github,那么您应该运行
git rm --fileName
git ls-files
以确保文件已被删除或未跟踪
git commit -m "UntrackChanges"
git push