Исходное дерево .gitignore, чтобы игнорировать все, кроме определенных каталогов/файлов

Я видел много примеров, и они в значительной степени говорят о то же самое, но по какой-то причине я не могу заставить его работать с помощью SourceTree. Моя структура папок показана ниже, я хочу игнорировать все, кроме папки 3 и всего ее содержимого, папки 2_3

# Ignore everything
/*

#except for
!.gitignore
!folder3/
!folder2/folder2_3/folder2_3_2/
1, всего ее содержимого и файла .ignore.

folder1
folder2
   folder2_1
   folder2_2
   folder2_3
     folder2_3_1
     folder2_3_2
          folder2_3
# Ignore everything
/*

#except for
!.gitignore
!folder3/
!folder2/folder2_3/folder2_3_2/
1 someOtherFile1.php someOtherFile12php someNewFolder folder2_3_3 folder2_4 folder3 .ignore somefile.php somefile2.php

в моем .ignore у меня есть следующее

# Ignore everything
/*

#except for
!.gitignore
!folder3/
!folder2/folder2_3/folder2_3_2/

Странно то, что если я ничего не игнорирую и могу видеть все свои файлы на панели неустановленных файлов, если я щелкну правой кнопкой мыши и проигнорирую someOtherFile.php и выберу параметр игнорировать все ниже, это сделает наоборот, sourceTree игнорирует свою папку (например, folder2_3

# Ignore everything
/*

#except for
!.gitignore
!folder3/
!folder2/folder2_3/folder2_3_2/
1) и все, что внутри!

Исходное дерево V 2.3.1.0

заранее спасибо


person david-l    schedule 22.11.2017    source источник


Ответы (1)


Если вы поняли, что вы хотите сделать, вы должны поместить в файл .gitignore следующие строки:

# Ignore everything
*

#except for
!.gitignore
!folder3/
!folder3/*
!folder2/
!folder2/folder2_3/
!folder2/folder2_3/folder2folder32/
!folder2/folder2_3/folder2folder32/*
!folder2/folder2_3/folder2folder32/*/*

Это потому, что вы должны указать как каталоги, так и содержимое.

Подробности

папка3

Итак, когда вы пишете

!folder3/

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

ты должен написать

!folder3/
!folder3/*

если внутри папки3 есть подкаталоги, вам нужно добавить одну строку для каждого уровня:

!folder3/*/*
!folder3/*/*/*

и т.д.

папка2/папка2_3/папка2folder32/

Опять же в случае:

!folder2/folder2_3/folder2_3_2/

ты должен написать

!folder2/folder2_3/folder2_3_2/
!folder2/folder2_3/folder2_3_2/*

и подпапки

!folder2/folder2_3/folder2_3_2/*/*

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

!folder2/
!folder2/folder2_3/
person Carlo Bellettini    schedule 22.11.2017
comment
Это логично, утром попробую. Спасибо. - person david-l; 23.11.2017
comment
Это нормально? вам нужна дополнительная помощь? посмотрите также ссылку, предложенную в комментарии к вашему вопросу другим пользователем (возможно, дублированный вопрос) - person Carlo Bellettini; 23.11.2017
comment
Спасибо, Карло, твое объяснение было точным. - person david-l; 02.12.2017