Dodaj nowo utworzony folder do .gitignore w Git

88

Miałem czysty katalog roboczy i zeszłej nocy przyniosłem klon z repozytorium Git. Ale teraz mój lokalny serwer utworzył i zawiera folder statystyk, który chcę zignorować.

Nie mogę zmusić Gita do ignorowania tego folderu, gdy uruchamiam status git.

On branch master
Your branch is ahead of 'origin/master' by 1 commit.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file: app_public/views/pages/privacy.php
    new file: app_public/views/pages/terms.php
    new file: public_html/stats/ctry_usage_200908.png
    new file: public_html/stats/daily_usage_200908.png
    new file: public_html/stats/dns_cache.db
    new file: public_html/stats/hourly_usage_200908.png
    new file: public_html/stats/index.html
    new file: public_html/stats/usage.png
    new file: public_html/stats/usage_200908.html
    new file: public_html/stats/webalizer.current
    new file: public_html/stats/webalizer.hist

Changed but not updated:
    modified: .gitignore

Dodałem w moim .gitignore kilka różnych linii, ale nadal próbuję je dodać:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*
Zawietrzny
źródło

Odpowiedzi:

98

Spróbuj /public_html/stats/*?

Ale ponieważ pliki zostały git statuszgłoszone jako zatwierdzone , oznacza to, że dodałeś je już ręcznie. W takim przypadku oczywiście jest trochę za późno, aby zignorować. Możesz git rm --cacheje (IIRC).

Michael Krelin - haker
źródło
16
Czekać! Masz „pliki do zatwierdzenia” - to znaczy, że już git addje -zarejestrowałeś.
Michael Krelin - haker
93

W tym celu istnieją dwa przypadki

Przypadek 1: Plik został już dodany do repozytorium git.

Przypadek 2: Nowo utworzony plik, a jego stan nadal jest wyświetlany jako nieśledzony plik podczas używania

git status

Jeśli masz przypadek 1:

KROK 1: Następnie uruchom

git rm --cached filename 

aby usunąć go z pamięci podręcznej repozytorium git

jeśli jest to katalog, użyj

git rm -r --cached  directory_name

KROK 2: Jeśli przypadek 1 się skończył, utwórz nowy plik o nazwie .gitignorew repozytorium git

KROK 3: Użyj poniższych, aby powiedzieć gitowi, aby ignorował / zakładał, że plik jest niezmieniony

git update-index --assume-unchanged path/to/file.txt

KROK 4: Teraz sprawdź status za pomocą git status open .gitignorew twoim edytorze nano, vim, geany itp ... dowolnym, dodaj ścieżkę do pliku / folderu do zignorowania. Jeśli jest to folder, użytkownik folder_name/*ma zignorować cały plik.

Jeśli nadal nie rozumiesz, przeczytaj artykuł git ignore file link.

Kshitiz
źródło
3
Dostaję, fatal: Unable to mark file .idea/jsLibraryMappings.xmlkiedy to zrobięupdate-index
OlehZiniak
@OlehZiniak Czy wiesz, co należy zrobić, gdy pojawi się fatal: Unable to mark filebłąd. Proszę pomóż.
chanchal pardeshi
uprawnienia i własność pliku, którego nie możesz oznaczyć. w którym kroku pokazuje błąd?
Kshitiz
16

Z „git help ignore” dowiadujemy się:

Jeśli wzorzec kończy się ukośnikiem, jest usuwany do celów poniższego opisu, ale znalazłby tylko dopasowanie do katalogu. Innymi słowy, foo / dopasuje katalog foo i ścieżki pod nim, ale nie będzie pasował do zwykłego pliku lub dowiązania symbolicznego foo (jest to zgodne z ogólnym sposobem działania pathspec w git).

Dlatego potrzebujesz

public_html / stats /

kajaco
źródło
1
Oznacza to po prostu, że „public_html / stats /” będzie pasować tylko do katalogu, ale nie do pliku, ale „public_html / stats” będzie pasować zarówno do katalogu, jak i do pliku o tej nazwie, więc to nie jest problem. Wciąż jednak dobry pomysł.
jmanning2k
1
Strona podręcznika mówi, że foo / dopasuje katalog foo i ścieżki pod nim. OP chce zignorować folder i jego zawartość. Oprócz innych problemów z git add, tak to się robi.
kajaco
6

To jest /public_html/stats/*.

$ ~/myrepo> ls public_html/stats/
bar baz foo
$ ~/myrepo> cat .gitignore 
public_html/stats/*
$ ~/myrepo> git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .gitignore
nothing added to commit but untracked files present (use "git add" to track)
$ ~/myrepo>
August Lilleaas
źródło
2

Jestem niesamowicie leniwy. Właśnie wyszukałem, mając nadzieję, że znajdę skrót do tego problemu, ale nie otrzymałem odpowiedzi, więc podrzuciłem to.

~ / bin / IGNORE_ALL

#!/bin/bash
# Usage: IGNORE_ALL <commit message>                                                                                                                             
git status --porcelain | grep '^??' | cut -f2 -d' ' >> .gitignore              
git commit -m "$*" .gitignore 

EG: IGNORE_ALL dodane ignorowanie statystyk

Spowoduje to dołączenie wszystkich plików ignorowanych do twojego .gitignore i zatwierdzenie. zauważ, że możesz chcieć później dodać adnotacje do pliku.

Michał
źródło