Dodałem następujący wiersz do .gitignore
:
sites/default/settings.php
ale kiedy piszę git status
, pokazuje plik jako plik niestacjonarny.
Jaki jest problem? Wszystkie inne wzorce działają dobrze.
Dodałem następujący wiersz do .gitignore
:
sites/default/settings.php
ale kiedy piszę git status
, pokazuje plik jako plik niestacjonarny.
Jaki jest problem? Wszystkie inne wzorce działają dobrze.
Odpowiedzi:
Upewnij się, że .gitignore
znajdujesz się w katalogu głównym katalogu roboczego, w tym katalogu uruchom git status
i skopiuj ścieżkę do pliku z wyjścia statusu i wklej go do pliku .gitignore
.
Jeśli to nie zadziała, prawdopodobnie plik jest już śledzony przez Git. Możesz to potwierdzić za pomocą danych wyjściowych git status
. Jeśli pliku nie ma na liście w sekcji „Nieśledzone pliki” , oznacza to, że jest już śledzony przez Git i zignoruje regułę z .gitignore
pliku.
Powodem ignorowania plików w Git jest to, że nie zostaną one dodane do repozytorium. Jeśli wcześniej dodałeś plik, który chcesz zignorować, będzie on śledzony przez Git, a reguły ignorowania pasujące do niego zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
Aby faktycznie zignorować plik, musisz go wyśledzić i usunąć z repozytorium. Możesz to zrobić za pomocą git rm --cached sites/default/settings.php
. Spowoduje to usunięcie pliku z repozytorium bez fizycznego usuwania pliku (tak właśnie --cached
działa). Po zatwierdzeniu tej zmiany plik zostanie usunięty z repozytorium, a zignorowanie go powinno działać poprawnie.
.git
katalog się znajduje i który sam jest katalogiem głównym repozytorium. Podobnie jak w przypadku klonowania repozytorium, /xy/
wówczas /xy/
katalog roboczy zawiera /xy/.git/
wewnątrz.
git add .
po, git rm --cached
aby poprawnie odbudować indeks.
Wpadłem na to, to stare pytanie, ale chcę, aby ten plik był śledzony, ale aby nie śledzić go na niektórych kopiach roboczych, aby to zrobić, możesz uruchomić
git update-index --assume-unchanged sites/default/settings.php
.gitignore zignoruje tylko pliki, które nie zostały jeszcze dodane do repozytorium.
Jeśli zrobiłeś git add .
, a plik został dodany do indeksu, .gitignore ci nie pomoże. Musisz to zrobić, git rm sites/default/settings.php
aby go usunąć, a następnie zostanie zignorowany.
git rm
powinien to zrobić, ale może to wymagać podania opcji -f, która usunęłaby go z katalogu roboczego. Nie wymyśliłem tego inaczej niż zrobić kopię pliku, zrobić, git rm -f
a następnie przywrócić kopię.
Proszę użyć tego polecenia
git rm -rf --cached .
git add .
Czasami pliki .gitignore nie działają, nawet jeśli są poprawne. Powodem, dla którego Git ignoruje pliki, jest to, że nie są one dodawane do repozytorium. Jeśli dodałeś plik, który chcesz wcześniej zignorować, będzie on śledzony przez Git, a wszelkie pomijane reguły dopasowania zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
Miałem ten sam problem. Pliki zdefiniowane .gitingore
tam, gdzie są wyświetlane jako pliki nieśledzone podczas działania git status
.
Powodem było to, że .gitignore
plik został zapisany w UTF-16LE
kodowaniu, a nie w UTF8
kodowaniu.
Po zmianie kodowania .gitignore
pliku na UTF8
to działało dla mnie.
Co zrobiłem, aby zignorować plik settings.php :
Myślę, że jeśli istnieje plik zatwierdzony w Git, to ignorowanie nie działa zgodnie z oczekiwaniami. Wystarczy usunąć plik i zatwierdzić. Potem to zignoruje.
Są przypadki, np. Pliki konfiguracji aplikacji, które chcę śledzić w git (więc .gitignore nie będzie działać), ale muszę je zmienić dla ustawień lokalnych. Nie chcę, aby git zarządzał tymi plikami lub wyświetlał je jako zmodyfikowane. Aby to zrobić, używam skip-worktree:
git update-index --skip-worktree path/to/file
Możesz potwierdzić, że pliki są pomijane, wyświetlając listę plików i sprawdzając, czy linie zaczynające się na literę S są pomijane
git ls-files -v | grep ^S
Jeśli w przyszłości chcesz, aby git ponownie zarządzał plikiem lokalnie, po prostu uruchom:
git update-index --no-skip-worktree path/to/file
Mescalito powyżej miało świetną odpowiedź, która poprowadziła mnie właściwą drogą, ale
git update-index --assume-niezmieniony plik / to / ignore.php
Ma umowę z git, w której: użytkownik obiecuje nie zmieniać pliku i pozwala Gitowi założyć, że działający plik drzewa pasuje do tego, co jest zapisane w indeksie.
Zmieniam jednak zawartość plików, więc w moim przypadku lepszym rozwiązaniem jest --skip-worktree.
Witryna Toshiharu Nishiny zapewniła doskonałe wyjaśnienie pomijania-pracy bez zakładania-niezmienionego: Ignoruj pliki już zarządzane lokalnie za pomocą Git
Kolejny możliwy powód - kilka wystąpień klientów git działających jednocześnie . Na przykład „git shell” + „GitHub Desktop” itp.
Zdarzyło mi się to, używałem „GitHub Desktop” jako głównego klienta i ignorowałem nowe ustawienia .gitignore: zatwierdzanie po zatwierdzeniu:
Powód : edytor Visual Studio Code działał w tle z tym samym otwartym repozytorium. VS Code ma wbudowaną kontrolę git, co powoduje pewne konflikty.
Rozwiązanie : sprawdź dwukrotnie wielu ukrytych klientów git i używaj tylko jednego klienta git jednocześnie, szczególnie podczas czyszczenia pamięci podręcznej git.
Upewnij się, że .gitignore nie ma rozszerzenia !! Nie może to być .gitignore.txt, w systemie Windows wystarczy nazwać plik .gitignore. i to zadziała.
Właśnie próbowałem tego z git 1.7.3.1 i podałem taką strukturę:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
gdzie repo
zatem jest wspomniany wyżej „root” (nazwałbym go rootem twojego drzewa roboczego) i .gitignore
zawiera tylko sites/default/settings.php
, ignorowanie działa dla mnie (i nie ma znaczenia, czy .gitignore
zostanie dodane do repo, czy nie). Czy to pasuje do twojego układu repo? Jeśli nie, co się różni?
Na wypadek, gdyby ktoś w przyszłości miał ten sam problem, co ja:
Jeśli korzystasz z
*
!/**/
!*.*
sztuczka, aby usunąć pliki binarne bez rozszerzenia, upewnij się, że WSZYSTKIE inne linie gitignore są PONIŻEJ. Git będzie czytał z .gitignore od góry, więc mimo że miałem „test.go” w moim gitignore, był on pierwszy w pliku i stał się „nieignorowany” po
!*.*
Próbowałem większość powyższych poleceń na terminalu VS Code i dostałem błędy takie jak:
fatal: pathspec '[dir]/[file]' did not match any files
Otworzyłem projekt na GitHub Desktop i stamtąd zignorowałem i zadziałało.