.whitelist gitignore na katalogu i jego zawartości
Próbuję dodać do białej listy katalog (i jego zawartość) nazwę dostawcy w moim katalogu dostawcy Zend Framework 2.
Oryginał .plik gitignore w / vendor wygląda tak:
# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*
Teraz chciałbym dodać do białej listy nazwę dostawcy katalogu, co nie powinno być zbyt trudne, myślałem. Mam przeczytałem dokumenty na gitignore i wypróbowałem następujące konfiguracje:
Pierwsza próba, dodaj !SupplierName zaraz po komentarzu, który mówi, że muszę dodać ścieżka na białej liście.
# Add here the vendor path to be whitelisted
!SupplierName
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*
Zaraz po tym wykonałem git status
, który nie pokazał katalogu dostawcy / dostawcy. git add vendor/SupplierName
pokazała następującą wiadomość:
Następujące ścieżki są ignorowane przez jednego z Twoich .pliki gitignore: vendor / SupplierName
Druga próba
# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!SupplierName
!.gitignore
*
Zaraz po tym wykonałem git status
, który nie pokazał katalogu dostawcy / dostawcy. git add vendor/SupplierName
pokazała następującą wiadomość:
The kolejne ścieżki są ignorowane przez jednego z Twoich .pliki gitignore: vendor / SupplierName
Trzecia próba
# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
!.gitignore
*
!SupplierName
Zaraz po tym wykonałem git status
, który nie pokazał katalogu dostawcy / dostawcy. git add vendor/SupplierName
wydaje się działać . Ale teraz, kiedy chcę dodać moduł.plik php (i kilka innych plików, podkatalogów, itp.) następuje git add vendor/SupplierName/Module.php
-->
Następujące ścieżki są ignorowane przez jednego z Twoich .pliki gitignore: nazwa dostawcy/dostawcy / modułu.php
# Add here the vendor path to be whitelisted
# Ex: for composer directory write here "!composer" (without quotes)
*
!.gitignore
!SupplierName
!SupplierName/
!SupplierName/*
Pozwala mi dodawać pliki bezpośrednio w nazwie dostawcy / dostawcy, ale git add vendor/SupplierName/config/module.config.php
nadal powoduje
Następujące ścieżki są ignorowane przez jednego z Twoich .pliki gitignore: vendor/SupplierName/Config / module.config.php
Szukałem problemów dotyczących rekurencyjnej białej listy, ponieważ wydaje się, że jest to problem, ale nic nie wyszło.
5 answers
Możesz użyć 2 Plików .gitignore
, aby osiągnąć pożądany efekt:
# vendor/.gitignore
*
!.gitignore
!SupplierName/
!SupplierName/*
# vendor/SupplierName/.gitignore
!*
Przetestowałem to za pomocą repo testowego i wydaje mi się, że działa dla mnie w dodawaniu plików tyle poziomów głęboko pod katalogiem vendor/SupplierName
.
$ git add .
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: vendor/.gitignore
# new file: vendor/SupplierName/.gitignore
# new file: vendor/SupplierName/a
# new file: vendor/SupplierName/b
# new file: vendor/SupplierName/c
# new file: vendor/SupplierName/d
# new file: vendor/SupplierName/dir1/d
# new file: vendor/SupplierName/dir1/dir4/dir5/dir6/dir7/dir8/dir9/dir10/somefile
# new file: vendor/SupplierName/dir1/dir4/f1
# new file: vendor/SupplierName/dir1/dir4/f2
# new file: vendor/SupplierName/dir1/dir4/f3
# new file: vendor/SupplierName/dir1/dir4/f4
# new file: vendor/SupplierName/dir1/e
# new file: vendor/SupplierName/dir1/f
# new file: vendor/SupplierName/dir3/dir6/f5
# new file: vendor/SupplierName/dir3/dir6/f6
# new file: vendor/SupplierName/dir3/dir6/f7
# new file: vendor/SupplierName/dir3/dir7/f8
# new file: vendor/SupplierName/e
#
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-10 09:32:47
Można to również osiągnąć za pomocą tylko jednego pliku .gitignore
(w katalogu głównym projektu):
/*
!/.gitignore
!/vendor
/vendor/*
!/vendor/SupplierName
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-10 23:37:04
Znalazłem ciekawy artykuł: https://jasonstitt.com/gitignore-whitelisting-patterns
Wszystkie napisy dla Jasona Stitta. Teksty są kopiowane z powyższej strony:
Zignoruj wszystko, a następnie dodaj konkretne podtytuły
# Ignore everything * # But descend into directories !*/ # Recursively allow files under subtree !/subtree/** # You can be specific with these rules !/some/other/deep/path/** !.gitignore
Reguła
!*/
ignoruje wszystkie katalogi. Ale Git nie śledzi katalogów, tylko pliki, więc!*/
sam w sobie będzie tylko Zezwalaj na zejście do pełnego drzewa katalogów; w rzeczywistości nie pozwoli wszystko do repo. Z ta zasada obowiązuje, potrzebujesz tylko jednej rule using the**
recursive wildcard in to include a subtree.Jeśli nie użyłeś
!*/
, potrzebujesz dodatkowych reguł, aby nie ignorować / subtree / i jego katalogi potomne.Nie każdy lubi
!*/
ponieważ oznacza to, że jeśli jakaś inna zasada pozwala na użycie wzorca nazwy pliku znajdującego się w katalogu, którego nie chcesz w repo sam katalog nie zostanie zablokowany. Musisz użyć szczegółowe zasady dotyczące plików do dołącz do tego.Ignoruj katalog główny, a następnie dodaj całe podtytuły
# Ignore everything in the root /* # Un-ignore all of subtree !/subtree/ !.gitignore
Ten wzór jest nieco grubszy niż poprzedni. Reguła
/*
będzie ignorować tylko elementy w katalogu głównym repo struktury katalogów, więc jak tylko dodasz katalog do białej listy, Wszystkie zawartość katalogu będzie również dozwolona, nawet bez użycia*
lub**
}.Ignoruj wszystko w katalogu, ale zachowaj puste katalog
* !.gitignore
Git nie chce dodawać pustego katalogu do repo, ponieważ śledzi pliki. Umieść ukryty plik (np.gitignore) do katalog, i zostanie zapisany. Ale aby Katalog był pusty, nawet jeśli masz tam pliki do celów testowych/rozwojowych, jest to dobry pomysł, aby zignorować wszystko z wyjątkiem .sam plik gitignore.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 13:31:35
Miałem podobny problem przy przejściu z CVS do Git.
W przeciwieństwie do CVS, Git nie patrzy na katalogi, skupia się na plikach.
Na przykład nie możesz-ignorować katalogu "a", ale nie możesz-ignorować wszystkich plików w katalogu "a" w ten sposób: !a / *
To samo dotyczy podkatalogów.
Jeśli katalog "A" ma podkatalog " b " i ignorujesz "!a / * " wtedy nadal otrzymasz wszystkie pliki w "a / b".
Więc to też musisz zignorować"!a / b/ * " i tak dalej dla wszystkich podkatalogi, które chcesz białej listy. Potrzebujesz tylko jednego .plik gitignore.Więc kończysz z czymś takim:
# ignore everything
*
# except for .gitignore files in the current directory
!.gitignore
# and all files in directory a
!a/*
#and all files in subdirectory b
!a/b/*
Z tym nadal można uzyskać pliki z a / C i a / b / c. nie jestem pewien, czy istnieje obejście dla rekurencji w podkatalogach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-10 19:49:43
Powinieneś najpierw umieścić wszystko na czarnej liście, a następnie dodać każdy katalog i podkatalog do białej listy.
Na przykład, Chcę tylko umieścić DIR /opt/source/
, DIR /opt/nginx/
i FILE /home/test/.opt/hello.txt
w białej liście, mógłbym napisać .gitignore
plik w ten sposób, aby działał:
/*
!/.gitignore
!/opt
/opt/*
!/opt/source/
!/opt/nginx/
!/home
/home/*
!/home/test
/home/test/*
!/home/test/.opt
/home/test/.opt/*
!/home/test/.opt/hello.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-25 03:15:30