15

我有以下文件夹结构:

public
    media
        catalog
            product
            category
        private
        tmp
        var
        test

我想 gitignoremedia目录中的所有内容,除了catalog/categoryprivate

我正在尝试的 gitignore 是:

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

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

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

4

2 回答 2

30

通常最简单的方法是将 a.gitignore放在它开始重要的级别。(如果您曾经拆分存储库或移动目录,这也很有帮助。)在这种情况下,您需要忽略文件夹中的所有内容catalog,因此请输入:privatepublic/mediapublic/media/.gitignore

/*
!/catalog/
!/private/

public/media/catalog/.gitignore说:

/*
!/category/

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

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

/*
!/catalog/
!/private/
/catalog/*
!/catalog/category/
于 2013-05-21T20:52:00.320 回答
7

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

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

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

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

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

public/media/catalog/**
!public/media/catalog/category/
于 2014-08-25T01:05:30.767 回答