gitignore目录异常无法正常工作

Mar*_*ace 12 git gitignore

我有以下文件夹结构:

public
    media
        catalog
            product
            category
        private
        tmp
        var
        test
Run Code Online (Sandbox Code Playgroud)

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

我正在尝试的gitignore是:

public/media/*
!public/media/catalog/category/
!public/media/private
Run Code Online (Sandbox Code Playgroud)

但它不起作用.添加到categoryprivate目录的任何新文件都无法添加.

我可以git添加力量,但如果可能的话,我希望通过gitignore完成

CB *_*ley 17

通常最简单的方法是将它放在.gitignore开始重要的水平上.(这也可以帮助,如果你曾经分裂一个仓库或移动目录.)在这种情况下,你需要不顾一切,除了catalogprivatepublic/media文件夹,以便在public/media/.gitignore放:

/*
!/catalog/
!/private/
Run Code Online (Sandbox Code Playgroud)

并在public/media/catalog/.gitignore:

/*
!/category/
Run Code Online (Sandbox Code Playgroud)

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

当然,public/media如果你愿意,你可以将它组合成一个单独的忽略:

/*
!/catalog/
!/private/
/catalog/*
!/catalog/category/
Run Code Online (Sandbox Code Playgroud)


tan*_*ius 7

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

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

我针对此限制的丑陋解决方案,我也在此处此处的相关答案中进行探讨:在重新包含所需文件之前重新包含路径中的所有父目录,同时通过重新排除这些父目录中的其他文件.

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

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

public/media/catalog/**
!public/media/catalog/category/
Run Code Online (Sandbox Code Playgroud)

  • 是的!/** 非常重要 (2认同)