【问题标题】:Issue with ignoring subdirectory in git忽略git中的子目录的问题
【发布时间】:2012-01-27 20:57:39
【问题描述】:

我有一个深度约为 5 个级别的 Maven 多模块项目。
我现在正在迁移到 git,我看到 target 文件夹的很多内容都被 git 捕获为“未分级更改”。
我用谷歌搜索了很多,但找不到关于如何让 git 忽略 target 文件夹的 整个 目录树的答案。
我的.gitignore,位于项目的根目录,如下所示:

.project  
.classpath
.settings/
target/

奇怪的是,位于 target 树下某处的 .class 文件确实会被上述定义忽略,但像 MANIFEST.MFpom.properties 这样的文件或我自己的应用程序属性文件位于target 目录树中的某处不会被忽略。
我已阅读 Git Ignores and Maven targets,但该解决方案似乎对我不起作用。
我还可以说,当我尝试添加 target/* 规则时,它不会改变任何内容,当我将 target/ 替换为 target/* 时,.class 文件也会显示为未暂存。
我真的很感激一些指导,因为在我看来,使用 git 和 maven 的人似乎不太可能还没有解决类似的问题。谢谢。

【问题讨论】:

  • 您之前是否将target/ 目录中的任何这些文件提交到您的存储库?如果文件已被 git 跟踪,则将文件添加到 .gitignore 无效。
  • @KL-7 我的搭档进行了初始提交,但实际上这听起来可能是问题所在。我会检查并报告。如果是这样,您可以将其发布为答案,我会接受。

标签: git gitignore


【解决方案1】:

其中一个原因可能是您已经将该文件提交到您的存储库。在这种情况下,将它们添加到 .gitignore 不会阻止 git 跟踪这些文件。要解决这个问题,您应该首先像这样从存储库中删除它们:

git rm -r target/

(如果您的项目有模块,则需要包含到相关模块目标的路径:
git rm -r parent_project/module_name/target/

如果您想从存储库中删除目录而不是从磁盘中删除,您可以使用--cached 选项:

git rm -r --cached target/

在任何情况下,您都应该将该删除提交到存储库(如果您愿意,您可以在同一提交中通过将target/ 添加到.gitignore 来执行此操作)。

【讨论】:

  • 对不起这个菜鸟,但是当我这样做git rm -r --cached target/ 时,它只会在我的本地存储库中删除吗?如果是这样,那么我以后需要将本地存储库推送到我的远程存储库,对吧?
  • 是的,首先您需要提交更改,然后推送到远程存储库。
  • 我没有忘记。我在这个问题上遇到了一些问题,但我认为这与我目前对 git 的缺乏经验有关,而不是与您的解决方案有关。我会尽快回复/接受您的回答。谢谢。
  • 关键附加问题 - “其中一个原因可能是您已经将该文件提交到您的存储库。在这种情况下,将它们添加到 .gitignore 不会阻止 git 跟踪这些文件。”非常感谢
  • 来自docs “gitignore 文件的目的是确保 Git 未跟踪的某些文件保持未被跟踪。要停止跟踪当前跟踪的文件,请使用 git rm --cached。”
【解决方案2】:
target
target/*

在 gitignore 中添加这些行以忽略目标文件和目标内的所有文件。这不应再跟踪该文件夹及其内容。

【讨论】:

    【解决方案3】:

    或者,在文件夹目标上使用tortoisegit 只需选择“删除并添加到忽略列表”。

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2011-08-12
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多