Игнорировать одну и ту же структуру каталогов на множественном пути с .gitignore

У меня есть веб-сайт, связанный с репозиторием Git в Bitbucket. Этот сайт многоязычный, но мне нужно загрузить в репозиторий только spanish и english языки. Проблема здесь в том, что одна и та же структура присутствует на нескольких путях. См. пример ниже (одна и та же языковая структура повторяется на нескольких путях):

system\
    cms\
    language\
        arabic\
        brazilian\
        chinese_simplified\
        chinese_traditional\
        czech\
        danish\
        dutch\
        english\
        finnish\
        french\
        german\
        greek\
        hebrew\
        hungarian\
        indonesian\
        italian\
        khmer\
        lithuanian\
        persian\
        polish\
        portuguese\
        russian\
        slovenian\
        spanish\
        swedish\
        thai\
        vietnamese\
    modules\
        addons\
            language\
                arabic\
                brazilian\
                chinese_simplified\
                chinese_traditional\
                czech\
                danish\
                dutch\
                english\
                finnish\
                french\
                german\
                greek\
                hebrew\
                hungarian\
                indonesian\
                italian\
                khmer\
                lithuanian\
                persian\
                polish\
                portuguese\
                russian\
                slovenian\
                spanish\
                swedish\
                thai\
                vietnamese\
        blog\
            language\
                ...
        comments\
            language\
                ...
        contact\
            language\
                ...
        files\
            language\
                ...
        keywords\
            language\
                ...
        maintenance\
            language\
                ...
        navigation\
            language\
                ...
        pages\
            language\
                ...
        permissions\
            language\
                ...
        redirects\
            language\
                ...
        search\
            language\
                ...
        settings\
            language\
                ...
        sitemap\
            language\
                ...
        streams_core\
            language\
                ...
        templates\
            language\
                ...
        users\
            language\
                ...
        variables\
            language\
                ...
        widgets\
            language\
                ...
        wysiwyg\
            language\
                ...

Есть ли способ или регулярное выражение, если оно поддерживается на .gitignore, разрешить только spanish и english и пропустить остальные?

Редактировать: решение toydarian Следуя предложению @toydarian, я добавил эти строки в файл .gitignore:

language/arabic/*
language/brazilian/*
language/chinese_simplified/*
language/chinese_traditional/*
language/czech/*
language/danish/*
language/dutch/*
language/finnish/*
language/french/*
language/german/*
language/greek/*
language/hebrew/*
language/hungarian/*
language/indonesian/*
language/italian/*
language/khmer/*
language/lithuanian/*
language/persian/*
language/polish/*
language/portuguese/*
language/russian/*
language/slovenian/*
language/swedish/*
language/thai/*
language/vietnamese/*

Но, как показывает изображение, это не работает, есть ли другие советы или способы?

введите здесь описание изображения


person ReynierPM    schedule 06.07.2014    source источник
comment
Я думаю, вы должны иметь возможность добавить language/ в строку 1, чтобы игнорировать все языковые каталоги, а затем добавить !english/ и !spanish/ в следующие две строки... сначала попробуйте, прежде чем я официально отвечу на вопрос.   -  person Neil Traft    schedule 13.08.2014


Ответы (1)


Вы можете использовать подстановочные знаки так же, как и в оболочке. смотрите здесь
Регулярные выражения не поддерживаются.

Поэтому единственное, что нужно сделать, это добавить <language>/* для каждого языка, который вы хотите исключить, в свой .gitignore
Это исключит все подкаталоги <language>.

<language> – это заполнитель для определенного языка, например "немецкий".

person toydarian    schedule 06.07.2014
comment
Итак, если я правильно понимаю, мне нужно будет добавить несколько строк как system/cms/language/german, system/cms/language/french, system/cms/language/italian и так далее? - person ReynierPM; 06.07.2014
comment
нет, вам нужна ровно одна строка для каждого языка, выглядящая так: <language>/*. например german/*, thai/* и polish/* - person toydarian; 06.07.2014
comment
Ну, я сделал это: system/cms/language/* !system/cms/language/english !system/cms/language/spanish, но не работает, я все еще вижу все языки, это неправильно? Я имею в виду, что исключаю все, кроме испанского и английского. - person ReynierPM; 06.07.2014
comment
Как я уже сказал, вы можете использовать любые подстановочные знаки, которые вы можете использовать в bash. поэтому исключение с !path/to/dir не работает. Смотрите мой комментарий пятиминутной давности. Это единственный способ, я вижу. - person toydarian; 06.07.2014
comment
Ну, .gitignore не работает с файлами, которые вы уже добавили в репозиторий... - person toydarian; 06.07.2014
comment
Да, они были добавлены раньше, но теперь я хочу удалить их из репозитория и оставить, это возможно? - person ReynierPM; 06.07.2014
comment
да, вы можете удалить файлы из репозитория git с помощью команды git rm. Однако это удалит их из файловой системы. - person toydarian; 06.07.2014