15

次のフォルダー構造があります。

public
    media
        catalog
            product
            category
        private
        tmp
        var
        test

mediaを除くディレクトリ内のすべてをgitignoreしたいcatalog/categoryprivate

私が試している私のgitignoreは次のとおりです。

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

しかし、うまくいきません。categoryまたはディレクトリに追加された新しいファイルは、private追加できません。

git add force を実行することもできますが、可能であれば gitignore を使用して実行したいと思います

4

2 に答える 2

30

通常、.gitignore重要になり始めるレベルに a を配置するのが最も簡単です。(これは、リポジトリを分割したり、ディレクトリを移動したりする場合にも役立ちます。)この場合、フォルダ内以外のすべてを無視する必要があるため、次のように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リポジトリのルート ディレクトリに単一のファイルがあるソリューション

.gitignoreリポジトリのルート レベルで1 つのファイルを使用しようとしました。あなたと同じように、私も通常、このようにすべての無視を一元化して、物事を整理します。ただし、この場合、「そのファイルの親ディレクトリが除外されている場合、ファイルを再インクルードすることはできない」ため、困難です[ソース]。

この制限に対する私の醜い解決策は、ここここの関連する回答でも調査しています。目的のファイルを再インクルードする前に、パスに沿ってすべての親ディレクトリを再インクルードし、これらの親ディレクトリ内の他のファイルを再除外して除外します.

それで、あなたの.gitignoreパターンは次のようになります:

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

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