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

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

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

之后我添加了。gitignore的路径

/wordpress/wp-content/uploads

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

我做错了什么?

我也试过

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

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

380209 次浏览

从git文档中:

您可能想要做的另一件有用的事情是将该文件保留在工作树中,但将其从登台区域中删除。换句话说,您可能希望将文件保存在硬盘驱动器上,但不再让Git跟踪它。如果您忘记向.gitignore文件中添加一些内容,并意外地将其放置,例如一个大的日志文件或一堆.a编译文件,那么这将特别有用。要做到这一点,使用——cached选项:

$ git rm --cached readme.txt

所以也许不包括"-r"?

我在谷歌搜索“git从跟踪中删除文件夹”时遇到了这个问题。记者的问题让我找到了答案。我在这里为子孙后代总结一下。

问题

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

回答

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

path_to_your_folder/

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

git rm -r --cached path_to_your_folder/

步骤3。将您的更改推到git回购。

从Git的角度来看,这个文件夹将被认为是“删除”的(例如,它们在过去的历史中,但不在最近的提交中,从这个回购中提取的人将从他们的树中删除文件),但仍然保留在你的工作目录中,因为你使用了--cached

这对我来说很管用:

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

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

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

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

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

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

我可以停止git表单跟踪文件夹的唯一方法是执行以下操作:

  1. 对本地文件夹进行备份并放在安全的地方。
  2. 从本地回收中删除文件夹
  3. 确保缓存被清除git rm -r --cached your_folder/
  4. 添加your_folder/到。gitignore
  5. 提交修改
  6. 将备份添加回您的回购

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

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

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

# EYZ0

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

# EYZ0

# EYZ0

我也是一个初学者,下面是我的解决方案。这个问题应该很容易解决:

  1. 在您的终端中,确保处于正确的文件夹中。对我来说,它应该是:my-MacBook:~ myUserName$
  2. 输入:git状态
  3. 它应该给你一个文件夹和文件的列表,git跟踪现在。复制它们。
  4. 输入:code .gitignore
  5. 您的默认代码编辑器将打开该文件,或者您也可以找到它并手动打开。
  6. 粘贴步骤3中的文件夹和文件名列表。确保每行开头没有制表符或空格。
  7. 保存并关闭该文件(.gitignore)
  8. 返回终端,输入:git status
  9. 如果你看到未跟踪的文件只有:.gitignore,这意味着它现在工作了。
  10. 输入:git add .gitignore
  11. 输入:git commit -m "任何你想在这里留下的消息;
  12. 现在你应该都准备好了!