Zachowaj ignorowane pliki poza statusem git


137

Chciałbym uniemożliwić Gitowi pokazywanie ignorowanych plików git status, ponieważ posiadanie ton dokumentacji i plików konfiguracyjnych na liście Zmienionych, ale niezaktualizowanych plików sprawia, że ​​lista jest w połowie bezużyteczna.

Czy to normalne, że Git wyświetla te pliki?

Umieszczam informacje o ignorowaniu w .gitignorepliku w katalogu głównym repozytorium Git i nie są one dodawane podczas używania, git add .ale wydaje się, że nie są one również w pełni ignorowane, ponieważ pojawiają się na powyższej liście i nie pojawiają się na liście wydrukowane przez git ls-files --others -i --exclude-standard. Pojawiają ~/.gitignoresię tam tylko pliki pasujące do wzorców w programie.

Czy to możliwe, ponieważ na wcześniejszym etapie ich nie ignorowałem i przynajmniej raz zostały w ten sposób popełnione?

Odpowiedzi:


240

Jak znalazłem w tym poście , .gitignoredziała tylko dla plików bez śledzenia. Jeśli dodałeś pliki do repozytorium, możesz:

git update-index --assume-unchanged <file>

lub usuń je z repozytorium przez

git rm --cached <file>

Edytować

Ten artykuł również to wyjaśnia


4
update-index działał dla mnie. Podobny problem, w którym status git pokazuje ignorowane pliki ... bardzo denerwujące. +1
Abe Petrillo

3
Nadal mam ten problem. Żadne z powyższych poleceń nie działało dla mnie. W obu przypadkach git twierdzi, że nie ma wiedzy o plikach, o których mowa, ale nadal pojawiają się one w statusie git :(
Cfreak

5
@Cfreak Czy git status -- <file>w Twoim pliku jest wyświetlany komunikat „Zmiany nie są wprowadzane w fazie zmian” lub „Pliki bez śledzenia”? Pierwsza z nich to jeśli masz już plik w indeksie i potrzebowałbym więcej informacji, aby rozwiązać twój problem (lepiej utwórz osobne pytanie z wyświetlonymi wiadomościami git i po prostu opublikuj link do niego w komentarzu). Późniejszy dotyczy plików, które nie są śledzone przez git (jeszcze), ale nie znajdują się w .gitignorepliku i można je dowolnie dodawać do indeksu.
MBO

1
@MBO - tak, to prawda. Dziękuję Ci! Twój komentarz pomógł mi znaleźć tę odpowiedź: stackoverflow.com/questions/594757/… który działał dla mnie.
Cfreak

2
Pierwsza opcja działa jak urok. Próbowałem już drugiego i spowodowało to, że pliki zostały ustawione jako „usunięte” i zdecydowanie tego nie chciałem.
Carrm

17

Pojawił się również ten problem, prawdopodobnie dlatego, że dodałeś zignorowany katalog / pliki do .gitignore po tym, jak zostały oznaczone jako „do śledzenia” przez GIT w początkowym przepływie zatwierdzania.

Musisz więc wyczyścić pamięć podręczną śledzenia git w następujący sposób:

git rm --cached -r [folder/file name]

Bardziej szczegółowe wyjaśnienie można przeczytać tutaj: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

Powyższe polecenie usunęło również pozostałości folderu / plików ze zdalnego źródła GIT. Twoje repozytoria GIT stają się czyste.


14

Problem może polegać na tym, że ten plik nadal znajduje się w pamięci podręcznej git. Aby rozwiązać ten problem, należy zresetować pamięć podręczną git.

Zresetuj pamięć podręczną git. To usuwa wszystko z indeksu.

git rm -r --cached . 

Dodaj ponownie wszystkie pliki:

git add . 

Popełnić:

git commit -m ".gitignore was fixed." 

2

To na pewno działa,

git rm --cached -r [folder/file name]


1

Zakładam, że nie chcesz dodawać katalogu tmp (platforma Visual Studio)

1- Dodaj linie poniżej do lokalnego pliku .gitignore

## ignore tmp
/tmp/
./tmp/

3 - tworzenie kopii zapasowych i lokalne usuwanie folderu tmp. (Utwórz kopię zapasową w innym miejscu, np. Na komputerze?)

4- Zatwierdź zmiany na Lokalny niż Synchronizuj ze zdalnym (np. Github).

Po tych krokach katalog tmp nie zostanie ponownie przesłany.


0

Z man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Osobiście staram się przechowywać pliki doxygen w moim drzewie źródłowym, więc po prostu dodałem to do mojego .gitignore (który znajduje się w najwyższym katalogu mojego drzewa źródłowego):

docs/*

Mam nadzieję, że to pomoże.


0

Poniższe kroki działają tylko w przypadku nieśledzonych plików . Te informacje dotyczą następującej konfiguracji:

Platform: linux

Git version: git version 1.8.3.1

Umieść listę plików do zignorowania w pliku „wykluczenia” znajdującym się w następującej lokalizacji.

<path till .git directory>/.git/info/exclude

Początkowa zawartość pliku „wyklucz”

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Ostateczna zawartość pliku „wyklucz”

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

Zgodnie z zaakceptowaną odpowiedzią możesz założyć, że plik jest niezmieniony , więc cokolwiek robisz na komputerze lokalnym, nie jest przekazywane do zdalnego oddziału.

Coś na przykład, git update-index --assume-unchanged src/main/resources/config.properties gdzie src / main.resources / config.properties to przykład ścieżki do znalezienia tego pliku w projekcie.

Teraz, jeśli chcesz całkowicie usunąć plik z repozytorium, możesz użyć remove cachedzamiast `git rm --cached

Ten scenariusz może mieć zastosowanie w następującej sytuacji:

Załóżmy, że mam plik, w którym przechowuję hasła. Początkowo zapisałem ten plik z błędnymi szczegółami, aby moi koledzy mieli ten sam plik na swoich komputerach. Jednak teraz dodałem poprawne dane na moim komputerze lokalnym. Jak zapobiec ponownemu przypadkowemu zatwierdzeniu tego pliku przy użyciu poprawnych teraz szczegółów hasła?


-1

lubię to

git --ignored myfolder

I pokaże status tylko dla mojego folderu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.