Poprawnie ignoruj rekurencyjnie wszystkie pliki w określonym folderze z wyjątkiem określonego typu pliku
Widziałem podobne pytania (1, 2 oraz 3), ale nie dostaję od nich odpowiedniego rozwiązania.
Muszę zignorować wszystkie pliki w określonym folderze z wyjątkiem określonego typu pliku. Folder jest podkatalogiem ścieżki głównej. Pozwól, że nazwę folder Resources
. Ponieważ nie chcę komplikować rzeczy, pozwól mi zignorować pliki w wszystkich folderach o nazwie Resources
gdziekolwiek to jest.
Jest to najczęściej spotykane rozwiązanie (we wszystkich duplikatach pytania)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
Problem z tym rozwiązaniem polega na tym, że przestaje śledzić nowo dodane pliki (ponieważ *
ignoruje wszystkie pliki). Nie chcę wyłączać każdego typu pliku. Chcę normalnego zachowania, gdzie jeśli jakiś nowy plik zostanie dodany, git status
pokazuje go.
W końcu znalazłem rozwiązanie tutaj . Rozwiązaniem jest dodanie kolejnego pliku .gitignore
do folderu Resources
. To działa poprawnie.
Czy mogę osiągnąć to samo z jednym ignorowanym plikiem? Uważam, że posiadanie wielu ignoruj pliki w różnych katalogach.
To jest to, co staram się osiągnąć:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
Ale to daje odwrotne wyjście. Ignoruje typy *.foo
i śledzi inne pliki.
4 answers
Od wersji git 1.8.2, Resources/** !Resources/**/*.foo
działa.
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-05-23 12:10:33
Najlepszą odpowiedzią jest dodanie źródła/.plik gitignore w zasobach zawierających:
# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo
Jeśli nie chcesz lub nie możesz tego dodać .plik gitignore, istnieje nieeleganckie rozwiązanie:
# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo
Będziesz musiał edytować ten wzorzec, jeśli dodasz katalogi głębiej niż podano.
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-11-19 20:50:29
Robię to źle lub zaakceptowana odpowiedź nie działa już z bieżącym Gitem.
Znalazłem właściwe rozwiązanie i zamieściłem je pod prawie tym samym pytaniem tutaj . Po więcej szczegółów udaj się tam.
Rozwiązanie:
# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be commited anyway if there is no commited file inside)
!/Resources/**/
# And except for *.foo files
!*.foo
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
2018-03-26 17:07:34
Może to wyglądać głupio, ale sprawdź, czy nie dodałeś wcześniej do indeksu folderu/plików, które próbujesz zignorować. Jeśli tak, to nie ma znaczenia, co włożysz do swojego .plik gitignore, foldery/pliki będą nadal wyświetlane.
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-05-17 08:14:54