从git tracking中删除文件夹

Ste*_*abo 359 git git-rm

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

git rm -r --cached wordpress/wp-content/uploads
Run Code Online (Sandbox Code Playgroud)

然后我添加了.gitignore的路径

/wordpress/wp-content/uploads
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,git status他们显示为已删除.如果我尝试提交更改,则文件将被删除,不仅会从跟踪中删除.

我究竟做错了什么?

我也试过了

git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

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

Tod*_*all 757

我在谷歌搜索"git从跟踪中删除文件夹"时遇到了这个问题.OP的问题引出了我的答案.我在这里为后代总结一下.

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

回答

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

path_to_your_folder/
Run Code Online (Sandbox Code Playgroud)

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

git rm -r --cached path_to_your_folder/
Run Code Online (Sandbox Code Playgroud)

第3步.将您的更改推送到您的git仓库.

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

  • "而且从这个仓库撤出的人会把文件从他们的树上移走"我可以阻止这个吗? (7认同)
  • 这正确地将我的文件从分支上的跟踪中删除,但在合并后删除了它们! (3认同)
  • 快速问题,文件夹路径必须是完整路径吗?或者只是以git存储库作为基础的路径? (2认同)
  • @anilbey不是以前已经被跟踪过的时间 (2认同)

qed*_*qed 37

这对我有用:

git rm -r --cached --ignore-unmatch folder_name
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您也想从目录中删除某些文件扩展名,则非常有用:`git rm -r --cached --ignore-unmatch .idea/*.xml` (2认同)

vit*_*ets 10

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

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*
Run Code Online (Sandbox Code Playgroud)

使用git rm --cached不利于协作.更多细节:如何停止跟踪并忽略Git中文件的更改?


小智 7

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

git rm --fileName

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

git commit -m "UntrackChanges"

git push


use*_*325 5

从git文档:

您可能想要做的另一件事是将文件保留在工作树中,但将其从暂存区中删除。换句话说,您可能希望将文件保留在硬盘上,但不再需要Git对其进行跟踪。如果您忘记在.gitignore文件中添加某些内容而意外地将其暂存,例如大型日志文件或一堆.a编译文件,则此功能特别有用。为此,请使用--cached选项:

$ git rm --cached readme.txt
Run Code Online (Sandbox Code Playgroud)

因此,也许不包括“ -r”?


luk*_*ine 5

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

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

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

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

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