2013-05-21 3 views
8

Я следующую структуру папок:gitignore каталог не работает

public 
    media 
     catalog 
      product 
      category 
     private 
     tmp 
     var 
     test 

Я хочу gitignore все в каталоге media для catalog/category кроме и private

Мой gitignore Я пытаюсь это:

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

Но это не работает. Любые новые файлы, добавленные в каталоги category или private, недоступны для добавления.

Я мог бы просто мерзавец добавить силу, но я хотел бы это сделать через gitignore, если это возможно

+0

Смотрите следующий вопрос, который очень похож: http://stackoverflow.com/questions/7001126/git-ignore-all-except-subfolder – greydet

ответ

7

Это, как правило, проще всего поместить весь .gitignore на уровне, где он начинает иметь значение. (Это также помогает, если вы когда-либо разделить хранилище или переместить каталоги вокруг.) В этом случае вам нужно игнорировать все, кроме catalog и private в папке public/media так в public/media/.gitignore сайте:

/* 
!/catalog/ 
!/private/ 

и public/media/catalog/.gitignore сайте:

/* 
!/category/ 

Это важно (и причина того, что ваши правила не работают) не игнорировать саму public/media/catalog каталог, так как в противном случае все, что в нем будут игнорироваться, даже если вы не хотите, чтобы игнорировать определенную часть его содержание.

Конечно, вы можете объединить это в один игнорировать на public/media уровне, если вы хотите:

/* 
!/catalog/ 
!/private/ 
/catalog/* 
!/catalog/category/ 
+0

Хорошо, это работает. Его немного боль на самом деле, так как у меня был 1 хороший gitignore, но теперь есть 3. Но он работает спасибо –

+0

@MartyWallace: вы можете иметь один «.gitignore», если хотите (я только подсчитал 2 в своем ответе) , Я просто считаю, что шаблоны становятся более сложными. –

2

Решение с одним .gitignore на уровне корневой

Вы пытались использовать один .gitignore файл на корневом уровне репозитория. Как и вы, я обычно централизую все игнорирование, как это, чтобы все было в порядке. В этом случае это сложно, потому что «Невозможно повторно включить файл, если родительский каталог этого файла исключен» [source].

Моего некрасиво решения этого ограничения, которые я также изучить в моих родственных ответы here и here: повторный включают в себя все родительские каталоги по пути перед повторным включая ваш нужный файл, сохраняя при этом других файлах в этих родительских каталогах путем повторно исключая их.

При том, что ваши .gitignore модели будут:

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

public/media/catalog/** 
!public/media/catalog/category/ 
Смежные вопросы