【问题标题】:gitignore directory exception not workinggitignore 目录异常不起作用
【发布时间】:2013-05-21 20:28:34
【问题描述】:

我有以下文件夹结构:

public
    media
        catalog
            product
            category
        private
        tmp
        var
        test

我想gitignore media 目录中除了catalog/categoryprivate 之外的所有内容

我正在尝试的 gitignore 是:

public/media/*
!public/media/catalog/category/
!public/media/private

但它不起作用。添加到categoryprivate 目录的任何新文件都不可添加。

我可以 git add force 但如果可能的话我希望通过 gitignore 来完成

【问题讨论】:

标签: git gitignore


【解决方案1】:

.gitignore 放在它开始重要的级别通常是最简单的。 (如果您拆分存储库或移动目录,这也很有帮助。)在这种情况下,您需要忽略 public/media 文件夹中除 catalogprivate 之外的所有内容,因此在 public/media/.gitignore 中放置:

/*
!/catalog/
!/private/

public/media/catalog/.gitignore 中输入:

/*
!/category/

不要忽略public/media/catalog 目录本身很重要(以及您的规则不起作用的原因),否则其中的所有内容都将被忽略,即使您不想忽略其内容的特定部分.

当然,如果您愿意,您可以将其合并为 public/media 级别的单个忽略:

/*
!/catalog/
!/private/
/catalog/*
!/catalog/category/

【讨论】:

  • 好吧,这行得通。实际上有点痛苦,因为我有 1 个不错的 gitignore,但现在有 3 个。但它有效,谢谢
  • @MartyWallace:如果你愿意,你可以有一个.gitignore(我的回答中只计算了2个),我只是发现模式变得更加复杂。
【解决方案2】:

在 repo 根目录中使用单个 .gitignore 文件的解决方案

您尝试在存储库的根级别使用一个.gitignore 文件。像你一样,我通常也会像这样集中所有忽略以保持整洁。在这种情况下,这很困难,因为“如果排除了该文件的父目录,则无法重新包含该文件”[source]。

我对此限制的丑陋解决方案,我也在我的相关答案herehere 中进行了探索:在重新包含所需文件之前重新包含路径上的所有父目录,同时将其他文件保留在这些父目录中重新排除目录。

这样,您的.gitignore 模式将是:

public/media/**
!public/media/private
!public/media/catalog/

public/media/catalog/**
!public/media/catalog/category/

【讨论】:

  • 是的! /** 很重要
  • /** 让一切变得不同。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2021-04-08
相关资源
最近更新 更多