Make.gitignore ignoruje wszystko oprócz kilku plików
Rozumiem, że a .plik gitignore zamyka określone pliki z wersji Gita Kontrola. Mam projekt (LaTeX), który generuje dużo dodatkowych plików (.auth, .dvi,pdf, logi, itp) Jak działa, ale nie chcę, aby były śledzone.
Jestem świadomy, że mógłbym (może powinienem) zrobić tak, aby wszystkie te pliki były umieszczane w osobny podfolder w projekcie, ponieważ mogłem wtedy po prostu zignorować folder.
Czy jest jednak jakiś możliwy sposób na utrzymanie plików wyjściowych w root of the drzewo projektu i wykorzystanie .gitignore zignorować wszystko oprócz plików, które Jestem śledzenie z Gitem? Coś jak
# Ignore everything
*
# But not these files...
script.pl
template.latex
# etc...
24 answers
Opcjonalny prefiks
!
, który neguje wzorzec; każdy pasujący plik wykluczony przez poprzedni wzór zostanie ponownie uwzględniony. Jeśli negowany wzór pasuje, spowoduje to zastąpienie źródeł wzorców o niższym priorytecie.
# Ignore everything
*
# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...
# ...even if they are in subdirectories
!*/
# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*
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-12-14 10:12:35
Jeśli chcesz zignorować całą zawartość katalogu z wyjątkiem jednego pliku wewnątrz niego, możesz napisać parę reguł dla każdego katalogu w ścieżce do pliku. Np. .gitignore
ignorowanie folderu pippo
z wyjątkiem pippo/pluto/paperino.xml
pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml
Zauważ, że gdybyś po prostu napisał powyżej:
pippo/*
!pippo/pluto/paperino.xml
To nie zadziała, ponieważ katalog pośredniczący pluto
nie istniałby dla Git, więc paperino.xml
nie mógł znaleźć miejsca, w którym mógłby istnieć.
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
2020-11-09 17:46:09
Chcesz używać /*
zamiast *
lub */
w większości przypadków
Użycie *
jest poprawne, ale działa rekurencyjnie. Od tego czasu nie będzie sprawdzał katalogów. Ludzie zalecają ponowne użycie !*/
do białej listy katalogów, ale w rzeczywistości lepiej jest umieścić na czarnej liście folder najwyższego poziomu za pomocą /*
# Blacklist files/folders in same directory as the .gitignore file
/*
# Whitelist some files
!.gitignore
!README.md
# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log
# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "/" is optional for folders, may match file though.
# "/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/
!folder/a/file.txt
# Adding to the above, this also works...
!/folder/a/deeply
/folder/a/deeply/*
!/folder/a/deeply/nested
/folder/a/deeply/nested/*
!/folder/a/deeply/nested/subfolder
Powyższy kod zignoruje wszystkie pliki z wyjątkiem .gitignore
, README.md
, folder/a/file.txt
, folder/a/b1/
i folder/a/b2/
i wszystko co zawarte jest w tych dwóch ostatnich folderach. (Oraz .DS_Store
i *.log
pliki będą ignorowane w tych folderach.)
Oczywiście też mógłbym zrobić np. !/folder
lub !/.gitignore
.
Więcej informacji: http://git-scm.com/docs/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
2019-02-06 20:00:51
Trochę dokładniej:
Przykład: Ignoruj wszystko w webroot/cache
- ale zachowaj webroot/cache/.htaccess
.
zwróć uwagę na ukośnik ( / ) po folderze cache
:
FAILS
webroot/cache*
!webroot/cache/.htaccess
Prace
webroot/cache/*
!webroot/cache/.htaccess
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
2016-02-14 20:38:30
# ignore these
*
# except foo
!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
2009-06-12 15:06:18
Aby zignorować niektóre pliki w katalogu, musisz to zrobić w prawidłowej kolejności :
Na przykład, ignoruj wszystko w folderze "aplikacja" z wyjątkiem index.php i folder "config" zwróć uwagę na zamówienie.
Musisz najpierw zaprzeczyć, że chcesz.FAILS
application/*
!application/config/*
!application/index.php
Prace
!application/config/*
!application/index.php
application/*
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
2012-08-09 08:39:07
Możesz użyć git config status.showUntrackedFiles no
, a wszystkie Nie śledzone pliki zostaną przed tobą Ukryte. Zobacz man git-config
po szczegóły.
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
2009-06-12 15:20:38
Aby wykluczyć folder z .gitignore, można zrobić co następuje.
!app/
app/*
!app/bower_components/
app/bower_components/*
!app/bower_components/highcharts/
Spowoduje to zignorowanie wszystkich plików / podfolderów wewnątrz bower_components
z wyjątkiem /highcharts
.
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-03-14 15:06:45
Jest kilka podobnych pytań na ten temat, więc napiszę to, co napisałem wcześniej:
Jedynym sposobem, aby to działało na mojej maszynie było zrobić to w ten sposób:
# Ignore all directories, and all sub-directories, and it's contents:
*/*
#Now ignore all files in the current directory
#(This fails to ignore files without a ".", for example
#'file.txt' works, but
#'file' doesn't):
*.*
#Only Include these specific directories and subdirectories and files if you wish:
!wordpress/somefile.jpg
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*
Zauważ, jak musisz wyraźnie zezwolić na zawartość dla każdego poziomu, który chcesz dołączyć. Więc jeśli mam podkatalogi 5 głęboko pod motywami, nadal muszę to przeliterować.
To jest z komentarza @Yarin: https://stackoverflow.com/a/5250314/1696153
Były to przydatne tematy:
I also tried
*
*/*
**/**
I **/wp-content/themes/**
Lub /wp-content/themes/**/*
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 11:55:01
Miał podobny problem jak OP, ale żadna z top 10 upvoted odpowiedź faktycznie nie zadziałała .
W końcu dowiedziałem się, co następuje
Błędna składnia:
*
!bin/script.sh
Poprawna składnia:
*
!bin
!bin/script.sh
Wyjaśnienie ze strony man gitignore :
Opcjonalny przedrostek"!", który neguje wzorzec; każdy pasujący plik wykluczony przez poprzedni wzorzec zostanie ponownie uwzględniony. nie jest możliwe ponowne dołączenie pliku, jeśli rodzic katalog tego pliku jest wykluczony . Git nie wymienia wykluczonych katalogów ze względu na wydajność, więc wszelkie wzorce NA zawartych plikach nie mają żadnego wpływu, bez względu na to, gdzie są zdefiniowane.
Co oznacza, że powyższa "zła składnia" jest błędna, ponieważ bin/script.sh
nie może być ponownie uwzględniona, ponieważ bin/
jest ignorowana. To wszystko.
Extended example:
$ drzewo .
.
├── .gitignore
└── bin
├── ignore.txt
└── sub
└── folder
└── path
├── other.sh
└── script.sh
$ cat .gitignore
*
!.gitignore
!bin
!bin/sub
!bin/sub/folder
!bin/sub/folder/path
!bin/sub/folder/path/script.sh
$ Git status --untracked-files --ignored
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
bin/sub/folder/path/script.sh
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
bin/ignore.txt
bin/sub/folder/path/other.sh
nothing added to commit but untracked files present (use "git add" to track)
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
2020-08-01 14:32:41
Miałem problem z podfolderem.
Nie działa:
/custom/*
!/custom/config/foo.yml.dist
Działa:
/custom/config/*
!/custom/config/foo.yml.dist
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-06-06 06:43:02
Próbowałem wszystkich odpowiedzi podanych powyżej, ale żadna nie zadziałała. Po przeczytaniu dokumentacji gitignore (TUTAJ ) dowiedziałem się, że jeśli najpierw wykluczysz folder, to nazwy plików w podfolderze nie będą indeksowane. Więc jeśli później użyjesz wykrzyknika, aby dołączyć plik, nie zostanie on znaleziony w indeksie i tym samym nie zostanie dołączony do twojego klienta git.
To był sposób na znalezienie rozwiązania. Zacząłem od dodawania wyjątków dla wszystkich podfolderów w moim folderze drzewo, aby go uruchomić, co jest piekielną robotą. Następnie udało mi się skompaktować szczegółową konfigurację do poniższej konfiguracji, co jest nieco sprzeczne z dokumentacją.. Działa .gitignore:# Ignore the 'Pro' folder, except for the '3rdparty' subfolder
/Pro/*
!Pro/3rdparty/
# Ignore the '3rdparty' folder, except for the 'domain' subfolder
/Pro/3rdparty/*
!Pro/3rdparty/domain/
# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/
W rezultacie widzę w kliencie Gita, że tylko dwa pliki wewnątrz folderu Pro/3rdparty/domain/modulename/ są wystawiane do następnego commita i dokładnie tego szukałem.
I jeśli chcesz dodać do białej listy kilka podfolderów tego samego folder następnie grupuje linie wykrzykników poniżej instrukcji exclude w następujący sposób:
# Ignore the 'Pro' folder, except for the '3rdparty' subfolder
/Pro/*
!Pro/3rdparty/
# Ignore the '3rdparty' folder, except for the 'domain' & 'hosting' subfolders
/Pro/3rdparty/*
!Pro/3rdparty/domain/
!Pro/3rdparty/hosting/
# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/
# Ignore the 'hosting' folder, except for the 'modulename' subfolder
Pro/3rdparty/hosting/*
!Pro/3rdparty/hosting/modulename/
Inaczej nie będzie działać zgodnie z oczekiwaniami.
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-09-12 13:03:09
Wiem, że jestem spóźniony na imprezę, ale oto moja odpowiedź.
Jak powiedział @ Joakim, aby zignorować plik, możesz użyć czegoś takiego jak poniżej.
# Ignore everything
*
# But not these files...
!.gitignore
!someFile.txt
Ale jeśli plik znajduje się w zagnieżdżonych katalogach, trochę trudno jest ręcznie zapisać reguły.
Na przykład, jeśli chcemy pominąć wszystkie pliki w projekcie git
, ale nie a.txt
, który znajduje się w aDir/anotherDir/someOtherDir/aDir/bDir/cDir
.
Wtedy nasze .gitignore
będzie coś takiego
# Skip all files
*
# But not `aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt`
!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt
Powyższy plik .gitignore
pomija wszystkie dirs i pliki z wyjątkiem !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt
Jak zapewne zauważyłeś, trudno jest zdefiniować te zasady.
Aby rozwiązać tę przeszkodę, stworzyłem prostą aplikację konsolową o nazwie git-do-not-ignore, która wygeneruje reguły dla Ciebie. Hostowałem projekt w github ze szczegółową instrukcją.
Przykład Użycia
java -jar git-do-not-ignore.jar "aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt"
Wyjście
!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt
Dostępna jest również prosta wersja internetowa tutaj
Dziękuję.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
2019-02-26 17:41:27
Tak to zrobiłem:
# Ignore everything
*
# Whitelist anything that's a directory
!*/
# Whitelist some files
!.gitignore
# Whitelist this folder and everything inside of it
!wordpress/wp-content/themes/my-theme/**
# Ignore this folder inside that folder
wordpress/wp-content/themes/my-theme/node_modules
# Ignore this file recursively
**/.DS_Store
Użyj gig status -u
do rekurencyjnego przeglądania pojedynczych plików w katalogach bez śledzenia - z git status
zobaczysz tylko foldery, co może cię oszukać, myśląc, że wszystko w nich jest śledzone
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
2019-06-13 01:08:28
To, co zadziałało dla mnie, chciałem zaangażować tylko jedną wtyczkę Cordova do repo:
...
plugins/*
!plugins/cordova-plugin-app-customization
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
2016-04-30 18:58:21
Mam Jquery i Angular od bowera. Bower zainstalował je w
/public_html/bower_components/jquery/dist/bunch-of-jquery-files
/public_html/bower_components/jquery/src/bunch-of-jquery-source-files
/public_html/bower_components/angular/angular-files
Zminimalizowany jquery znajduje się w katalogu dist
, a angular w katalogu angular
. Potrzebowałem tylko zminimalizowanych plików, aby zostać dołączonym do Githuba. Ktoś manipulował .gitignore i to udało mi się wyczarować...
/public_html/bower_components/jquery/*
!public_html/bower_components/jquery/dist
/public_html/bower_components/jquery/dist/*
!public_html/bower_components/jquery/dist/jquery.min.js
/public_html/bower_components/angular/*
!public_html/bower_components/angular/angular.min.js
Mam nadzieję, że komuś się to przyda.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-01-27 20:57:04
Proste rozwiązanie jeśli musisz zignorować wszystko oprócz kilku plików i kilku root folderów:
/*
!.gitignore
!showMe.txt
!my_visible_dir
Magia jest w /*
(jak opisano powyżej) ignoruje wszystko w folderze (głównym), ale nie rekurencyjnie.
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
2019-01-18 16:57:21
Miałem też pewne problemy z negacją pojedynczych plików. Udało mi się je zatwierdzić, ale mój IDE (IntelliJ) zawsze narzekał na ignorowane pliki, które są śledzone.
git ls-files -i --exclude-from .gitignore
Wyświetlono dwa pliki, które wykluczyłem w ten sposób:
public/
!public/typo3conf/LocalConfiguration.php
!public/typo3conf/PackageStates.php
W końcu to zadziałało dla mnie:
public/*
!public/typo3conf/
public/typo3conf/*
!public/typo3conf/LocalConfiguration.php
!public/typo3conf/PackageStates.php
Kluczem był negacja folderu typo3conf/
najpierw.
Wydaje się również, że kolejność wypowiedzi nie ma znaczenia. Zamiast tego musisz jawnie zaneguj wszystkie podfoldery, zanim będziesz mógł zanegować w nich pojedyncze pliki.
Folder !public/typo3conf/
i zawartość folderu public/typo3conf/*
to dwie różne rzeczy .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
2018-07-12 15:51:47
I got this working
# Vendor
/vendor/braintree/braintree_php/*
!/vendor/braintree/braintree_php/lib
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-09-10 06:39:31
Na razie nic mi nie wyszło, bo próbowałem dodać jeden słoik z lib.
To nie działa:
build/*
!build/libs/*
!build/libs/
!build/libs/myjarfile.jar
To zadziałało:
build/*
!build/libs
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-05-15 17:59:34
Wydaje się, że znalazłem coś, co działało dla mnie, o czym nikt inny nie wspomniał.
# Ignore everything
*
# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...
# And if you want to include a sub-directory and all sub-directory and files under it, but not all sub-directories
!subdir/
!subdir/**/*
Zasadniczo, wydaje się, że neguje podkatalog przed ignorowaniem, musisz mieć dwa wpisy, jeden dla samego podkatalogu !subdir/
, a następnie drugi, który rozszerza się na wszystkie pliki i foldery w nim !subdir/**/*
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
2019-06-08 09:30:50
Najprostszym sposobem na to jest wymuszenie dodania pliku. Będzie on rozliczany w git, nawet jeśli jest zakopany lub zagnieżdżony w drzewie podkatalogów ignorowanych przez git.
Na przykład:
Katalog X64 jest wykluczony w .gitignore: {]}
x64/
Ale chcesz dołączyć plik myFile.py
znajdujący się w katalogu x64/Release/
.
Wtedy musisz:
git add -f x64/Release/myFile.py
Możesz to zrobić dla wielu plików, które pasują do wzorca, np.
git add -f x64/Release/myFile*.py
I tak dalej.
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
2020-11-16 00:56:30
Gist
# Ignore everything
*
# But not these files...
!script.pl
!template.latex
I prawdopodobnie zawierać:
!.gitignore
Odniesienie
Z https://git-scm.com/docs/gitignore:
Opcjonalny prefiks "
!
", który neguje wzorzec; każdy pasujący plik wykluczony przez poprzedni wzorzec zostanie ponownie dołączony. Nie jest możliwe ponowne dołączenie pliku, jeśli Katalog nadrzędny tego pliku jest wykluczony. Git nie wymienia wykluczonych katalogów ze względu na wydajność, więc wszelkie wzorce NA zawartych plikach nie mają efekt, bez względu na to, gdzie są zdefiniowane. Dla wzorców zaczynających się literalnie"!
", na przykład "\!important!.txt
", należy umieścić ukośnik wsteczny ("\
") Przed pierwszym "!
"....
Przykład, aby wykluczyć wszystko z wyjątkiem określonego katalogu
foo/bar
(zwróć uwagę na/*
- bez ukośnika, symbol wieloznaczny również wykluczy wszystko wewnątrzfoo/bar
):$ cat .gitignore # exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar
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
2020-01-13 21:42:22
W ten sposób zachowuję strukturę folderów ignorując Wszystko inne. Musisz mieć README.md plik w każdym katalogu (lub .gitkeep).
/data/*
!/data/README.md
!/data/input/
/data/input/*
!/data/input/README.md
!/data/output/
/data/output/*
!/data/output/README.md
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
2021-01-29 23:17:07