Z odpowiedniej dokumentacji Git :
Wzorce, które są specyficzne dla konkretnego repozytorium, ale które nie muszą być współużytkowane z innymi powiązanymi repozytoriami (np. Pliki pomocnicze, które znajdują się w repozytorium, ale są specyficzne dla przepływu pracy jednego użytkownika) powinny przejść do $GIT_DIR/info/exclude
pliku.
.git/info/exclude
Plik ma ten sam format, jak każdy .gitignore
plik. Inną opcją jest ustawienie core.excludesFile
nazwy pliku zawierającego wzorce globalne.
Uwaga: jeśli masz już zmiany niestacjonarne, po edycji wzorców ignorowania musisz uruchomić następujące czynności:
git update-index --assume-unchanged <file-list>
Uwaga na$GIT_DIR
: Jest to notacja używana w całym podręczniku git, aby wskazać ścieżkę do repozytorium git. Jeśli zmienna środowiskowa jest ustawiona, zastąpi ona lokalizację repozytorium, w którym się znajdujesz, co prawdopodobnie nie jest tym, czego chcesz.
Edycja : Innym sposobem jest użycie:
git update-index --skip-worktree <file-list>
Odwróć to przez:
git update-index --no-skip-worktree <file-list>
git update-index --assume-unchanged [<file>...]
po dodaniu pliku wykluczającego. Zmiany nie zostaną uwzględnione do tego czasu.skip-worktree
prawdopodobnie byłby preferowanyassume-unchanged
.Aktualizacja : rozważ użycie
git update-index --skip-worktree [<file>...]
zamiast tego, dzięki @danShumway! Zobacz wyjaśnienie Borealid na temat różnicy między dwiema opcjami .Stara odpowiedź:
Jeśli musisz zignorować lokalne zmiany w śledzonych plikach (mamy to z lokalnymi modyfikacjami plików konfiguracyjnych), użyj
git update-index --assume-unchanged [<file>...]
.źródło
git update-index --assume-unchanged my-file.php
, aby zaczął być ignorowany. Dzięki za wskazówkę!git update-index --no-assume-unchanged my-file.php
.git/info/exclude
to przypadku chcesz (aby uniknąć zanieczyszczenia często udostępnianego i śledzonego--assume-unchanged
przed przeczytaniem twojej aktualizacji . I rozwiązał się--no-assume-unchanged
, a następnie zrobił--skip-worktree
... Am I w jasne?Dodaj następujące wiersze do sekcji [alias] pliku .gitconfig
Teraz możesz użyć,
git ignore my_file
aby zignorować zmiany w pliku lokalnym igit unignore my_file
przestać ignorować zmiany.git ignored
wyświetla zignorowane pliki.Ta odpowiedź pochodzi z http://gitready.com/intermediate/2009/02/18/temporently-ignoring-files.html .
źródło
Masz kilka opcji:
.gitignore
plik w swoim katalogu roboczym (lub zastosuj go automatycznie za pomocą programu topgit lub innego narzędzia do łatania).$GIT_DIR/info/exclude
pliku, jeśli dotyczy to jednego drzewa.git config --global core.excludesfile ~/.gitignore
i dodaj wzory do swojego~/.gitignore
. Ta opcja ma zastosowanie, jeśli chcesz zignorować określone wzory we wszystkich drzewach. Używam tego za.pyc
i.pyo
plików, na przykład.Upewnij się również, że używasz wzorców i nie wyliczasz jawnie plików, jeśli ma to zastosowanie.
źródło
git config --global
ustawić tę opcję globalnie.Myślę, że szukasz:
które ignorują zmiany wprowadzone lokalnie
Oto http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ więcej wyjaśnień na temat tego rozwiązania!
aby cofnąć użycie:
źródło
--skip-worktree
i--assume-unchanged
przy nim--skipworktree
, czy powinienem później zmienić zdanie i chcieć ponownie rozpocząć śledzenie pliku?git update-index --no-skip-worktree <file>
Możesz zainstalować niektóre aliasy git, aby uprościć ten proces. To edytuje
[alias]
węzeł twojego.gitconfig
pliku.Skróty, które to instaluje, są następujące:
git ignore config.xml
config.xml
- zapobiegając przypadkowemu zatwierdzeniu tych zmian.git unignore config.xml
config.xml
- umożliwiając ponowne zatwierdzenie tych zmian.git ignored
Zbudowałem je, odwołując się do odpowiedzi Phatmanna - która przedstawia
--assume-unchanged
wersję tego samego.Prezentowana wersja używa
--skip-worktree
do ignorowania lokalnych zmian. Zobacz odpowiedź Borealid, aby uzyskać pełne wyjaśnienie różnicy, ale zasadniczo--skip-worktree
celem programistów jest zmiana plików bez ryzyka zatwierdzenia ich zmian .git ignored
Polecenia przedstawiony tutaj używagit ls-files -v
, i filtruje listę, aby wyświetlić tylko te wpisy rozpoczynające się odS
tagu.S
Tag oznacza plik, którego status jest „skip worktree”. Aby zobaczyć pełną listę statusów plików pokazanych przezgit ls-files
: patrz dokumentacja-t
opcji nagit ls-files
.źródło
'!git ls-files -v | grep "^S"'
? Polecenie to nie działa dla mnie tam i wydaje się, że działa dobrze po usunięciu.Expansion of alias 'ignored' failed; 'git' is not a git command
. To ma sens; bez wykrzyknika: git aliasy polecenia dogit git ls-files …
.git ignore <filename>
dotyczy on tylko tego katalogu. A kiedy w końcu chcesz wprowadzić zmiany w tym pliku i zatwierdzić i przesłać zdalnie, po prostu skorzystaj z poręcznego narzędzia,git unignore <filename>
aby tymczasowo zacząć go ponownie śledzić! Dzięki!Możesz po prostu dodać plik .gitignore do katalogu domowego, tj .
$HOME/.gitignore
Lub~/.gitignore
. Następnie powiedz gitowi, aby użył tego pliku z poleceniem:Jest to normalny plik .gitignore, do którego git odwołuje się, podejmując decyzję, co zignorować. Ponieważ znajduje się w twoim katalogu domowym, dotyczy tylko ciebie i nie zanieczyszcza żadnych plików .gitignore projektu.
Stosuję to podejście od lat z doskonałymi wynikami.
źródło
git check-ignore <file-name>
do weryfikacji. LMK, jeśli to działa=
:git config --global core.excludesfile ~/.gitignore
.gitignore
plik w katalogu domowym i powiedziałem gitowi, aby używał tego pliku, a następnie usunąłem pliki, które chciałbym wyśledzić lokalnie. Jednak po wprowadzeniu zmian zdalne repozytorium również usunęło te pliki. Czy zrobiłem coś złego?.gitignore
polega na ignorowaniu plików znajdujących się w katalogu lokalnym. To, co powinieneś był zrobić, togit rm --cached
usuwa je z repozytorium, ale pozostawia w lokalnym. Powinieneś być w stanie wrócić do poprzedniego zatwierdzenia z czymś w rodzajugit reset --soft HEAD^
cofnięcia zatwierdzenia i odzyskania plików. Na tym polega piękno git: wszystko jest nadal w twojej historii git.Aby zignorować nieśledzone pliki, zwłaszcza jeśli znajdują się one w (kilku) folderach, które nie są śledzone, prostym rozwiązaniem jest dodanie
.gitignore
pliku do każdego nieśledzonego folderu i wprowadzenie w jednym wierszu zawierającym*
następujący wiersz. To naprawdę proste i proste rozwiązanie, jeśli nieśledzone pliki znajdują się w kilku folderach. Dla mnie wszystkie pliki pochodziły z jednego nieśledzonego folderu,vendor
a powyższe po prostu działało.źródło
Jeśli Twoje repozytorium nie ma jeszcze pliku .gitignore, prostym rozwiązaniem jest utworzenie pliku .gitignore, a następnie dodanie go
.gitignore
do listy plików do zignorowania.źródło
.gitignore
plik na górze. Ale moje brudne pliki znajdują się w głębokim folderze, więc właśnie dodałem własne.gitignore
. +1