2013-03-22 4 views
0

Это моя структура папок (в find * формате Unix).gitignore исключения, когда имя папки неизвестно

Project 
Project/hi.txt 
Project/userdata 
Project/userdata/username 
Project/userdata/username/info.txt 
Project/userdata/username/cool 
Project/userdata/username/cool/foo.txt 
Project/userdata/username/cool/bar.txt 

Как я могу использовать .gitignore, чтобы исключить все в userdata папки кроме для папки cool? Это решение должно не полагаться на что username на самом деле есть.

+0

Будет ли папка 'cool' находиться только внутри двух уровней ниже« userdata »или может быть где угодно внутри' userdata'? – Tuxdude

ответ

3

.gitignore также поддерживает включения, а не только исключения. Включение исключает исключение. Предостережение заключается в том, что если вы исключаете папку, она даже не проверяет включения в отношении содержимого папки. Таким образом, вы хотите настроить ваш .gitignore выглядеть (и я предполагаю, что это внутри Project/ уже)

/userdata/* 
!/userdata/*/ 
/userdata/*/* 
!/userdata/*/cool/ 

Это говорит «игнорировать все, что в /userdata, но не игнорировать папки, но не игнорировать все внутри вложенных папок, но не игнорируйте дважды вложенную папку с именем cool ".

+0

Но что, если мы еще не находимся внутри 'Project /'? Предположим, что все находится в еще одной супер-папке 'superfolder', а' .gitignore' находится внутри этой супер-папки. В этом случае простое удаление косых черт в начале ваших правил игнорирования не работает **. Любые идеи, почему бы и нет? – steve882

+1

Экспериментируя, я обнаружил, что в этом случае я должен был добавить '* /' перед каждым правилом (или сразу после '!' Конечно). Тогда это сработает. Но это не будет работать, если я сразу же начну с 'userdata/*', '! Userdata/* /' и т. Д. Можете ли вы объяснить, почему? – steve882

+0

@ steve882: наличие символа '/' в шаблоне игнорирования привязывает шаблон к текущей папке. Как правило, я всегда префикс шаблонов с '/', чтобы привязать их, даже если они содержат '/' уже, поэтому мне не нужно об этом думать. –

Смежные вопросы