Dodaj .gitignore do gitignore

152

Czy można dodać .gitignoreplik do .gitignoresiebie?

.gitignore

Ale to nie działa

Nie chcę widzieć tego w edytowanych plikach

7ochem
źródło
9
dlaczego chcesz to zrobić? po prostu zatwierdź zmiany. .gitignorema być częścią twojego repozytorium, wymieniając wzorce plików, które są śmieciami dla projektu.
KurzedMetal
2
.gitignorepowinny być częścią twojego repozytorium, aby wszyscy w twoim zespole ignorowali lub sprawdzali te same pliki. To, że .gitignorejest gdzieś w folderze z kodem, nie oznacza, że ​​musisz go wdrożyć.
Ryan Lundy
można użyć git rm --cached .gitignorei untracking .gitignore
hassanzadeh.sd

Odpowiedzi:

187

Celem .gitignorepliku jest zapobieganie przypadkowemu zatwierdzeniu niektórych typowych plików w projekcie, takich jak wygenerowane pliki pamięci podręcznej, przez każdą osobę współpracującą przy projekcie. Dlatego nie powinieneś ignorować .gitignore, ponieważ ma być uwzględniony w repozytorium.

Jeśli chcesz zignorować pliki tylko w jednym repozytorium, ale chcesz uniknąć zatwierdzania listy ignorowanych (na przykład dla plików osobistych), możesz dodać je do .git/info/excludetego repozytorium.

Jeśli chcesz zignorować określone pliki w każdym repozytorium na twoim komputerze, możesz utworzyć plik, ~/.gitignore_globala następnie uruchomić

git config --global core.excludesfile ~/.gitignore_global
Lars Nyström
źródło
2
Chociaż jest to szczegółowa odpowiedź, nie odpowiada na pytanie. „Nie powinienem” nie oznacza, że ​​nie możesz. W moim przypadku mam dowiązanie symboliczne zawierające plik .gitignore, a teraz, gdy chcę zatwierdzić, git próbuje dołączyć ten plik .gitignore. Wydaje się, że jest to idealne IMO dla przypadków użycia.
xorinzor
Po co skomplikować sprawy, skoro prosta odpowiedź brzmi NIE.
mountainLion
40

.Gitignore może się zignorować, jeśli nigdy nie został zarejestrowany:

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

Jeśli zarejestrujesz .gitignore (zanim powiesz mu, aby się ignorował), to zawsze pojawi się on w statusie git, nawet jeśli później zmodyfikujesz go tak, aby sam się ignorował.

Mark E. Haase
źródło
2
Dokładnie, to moja sprawa. Chcę mieć lokal .gitignoredo pracy, z git-svnktórym nikt nie powinien widzieć. Więc po prostu dodałem to do siebie i po prostu zadziałało. Ale potem poszukałem w Google, żeby zobaczyć, czy jakieś spięte osoby wytłumaczą innym, jak to jest „złe”. Ta odpowiedź powinna zostać przyjęta, a następnie głosowałbym .git/info/excluderównież za sugestiami. Więc to musi być po prostu niezauważone ... Nie jest to zbyt zaskakujące, przynajmniej jeśli kiedykolwiek zostałeś "obalony" (svn).
Tomasz Gandor
2
.gitignoreNajpierw mam plik z kopią zapasową. Następnie używam git rm .gitignorei dokonuję tej zmiany. Na koniec dodaj i .gitignoreponownie zatwierdź plik z regułą dla .gitignore. To działa!
qzhang
5
Aby to naprawić, możesz uruchomić git rm --cached .gitignore.
Gideon,
21

Naprawdę nie ma dobrego powodu, aby to robić. Jeśli chcesz, aby pliki były ignorowane tylko dla twojego klona , dodaj je do .git/info/exclude, a nie do .gitignorepliku.

Daenyth
źródło
Otrzymuję komunikat „Nie można ukończyć operacji z powodu istniejących zmian w następującym pliku”, a plik, który zawiera, zawiera ten, który mam wykluczyć. Każdy pomysł, dlaczego?
Paul McCarthy
4

Po wprowadzeniu .gitignorepliku gitignore spróbuj wykonać następujące czynności:

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

Powinno działać, chociaż jak już wspomniano, ignorowanie gitignore może przynieść efekt przeciwny do zamierzonego, jeśli repozytorium jest udostępniane przez wielu użytkowników.

Arnab Sanyal
źródło
2

Tak, możesz; nadal widzisz go w edytowanych plikach, ponieważ nadal jest śledzony przez git, a pliki śledzone przez git są zawsze oznaczane jako zmodyfikowane, nawet jeśli znajdują się w .gitignore. Więc po prostu go wyśledzić .

Ale dlaczego nie zatwierdzić lub zresetować zmian, które na nim masz? To znacznie lepszy sposób na usunięcie go ze statusu ... Należy również pamiętać, że każdy nowy klon repozytorium będzie musiał dodać jego .gitignore, co może być denerwujące.

Charles B.
źródło
Tak, i got rm --cached .gitignoreprawdopodobnie będziesz musiał usunąć go oddzielnie z git przez .
Tadeck
git rm --cached .gitignore jest usuwany z git. To jest destrukcyjne i niepożądane. Jak po prostu zignorować .gitignore dla lokalnego klona?
javadba