Jakie są różnice między .gitignore i .gitkeep?

1925

Jakie są różnice między .gitignorei .gitkeep? Czy mają to samo pod inną nazwą, czy oboje pełnią inną funkcję?

Wydaje mi się, że nie jestem w stanie znaleźć dużo dokumentacji .gitkeep.

Matty
źródło

Odpowiedzi:

3435

.gitkeep nie jest udokumentowane, ponieważ nie jest to funkcja Git.

Git nie może dodać całkowicie pustego katalogu . Ludzie, którzy chcą śledzić puste katalogi w Git, opracowali konwencję umieszczania plików wywoływanych .gitkeepw tych katalogach. Plik można nazwać czymkolwiek; Git nie przypisuje tej nazwie żadnego specjalnego znaczenia.

Istnieje konkurencyjna konwencja dodawania .gitignorepliku do pustych katalogów w celu ich śledzenia, ale niektórzy uważają to za mylące, ponieważ celem jest zachowanie pustych katalogów, a nie ignorowanie ich; .gitignoresłuży również do wyświetlania listy plików, które Git powinien zignorować, szukając nieśledzonych plików.

Wooble
źródło
414
Czy nie byłoby lepszym rozwiązaniem umieszczenie READMEpliku w innym pustym podkatalogu, który zawiera trochę informacji o tym, do czego będzie używany ten podkatalog? Wydaje się mylące, że plik o nazwie .gitkeeptak naprawdę nie jest częścią git.
tamouse
423
@tamouse wiele razy ścieżka pustego katalogu (np. nazwy folderów) jest wystarczająca, aby wyrazić swój cel (przykłady: szablony / pamięć podręczna, upload / thumbs itp.). W takich przypadkach umieszczenie pliku readme w każdym z nich wydaje się zbędne.
Halil Özgür
16
osoby, które chcą śledzić puste katalogi, powinny w README wskazać, że katalog musi zostać utworzony lub utworzyć katalogi za pomocą narzędzia do budowania lub dowolnego narzędzia wymagającego katalogu; /
32
@tamouse, @omouse: .gitignorePlik z dwoma liniami: *i !.gitignorejest bardziej niż wystarczająco przejrzysty, aby przekazać, co się dzieje. Jeśli potrzebne jest dalsze opracowanie, dodaj komentarz na początku pliku, używając # składni.
Droogans,
63
Warto zauważyć, że popularny framework Railsów nieznacznie zmienił tę konwencję za pomocą .keepplików zamiast .gitkeepzachowywać te puste foldery, ponieważ git nie jest jedynym systemem kontroli źródła, który nie śledzi pustych folderów. Więcej informacji tutaj: github.com/rails/rails/issues/2800
Claudio Floreani
330

.gitkeepjest tylko symbolem zastępczym. Plik fikcyjny, więc Git nie zapomni o katalogu, ponieważ Git śledzi tylko pliki.


Jeśli chcesz mieć pusty katalog i upewnić się, że pozostaje on „czysty” dla Git, utwórz w .gitignorenim następujący wiersz:

# .gitignore sample
###################

# Ignore all files in this dir...
*

# ... except for this one.
!.gitignore

Jeśli chcesz, aby Git był widoczny tylko jeden typ plików, oto przykład, jak odfiltrować wszystko, oprócz .gitignore i wszystkich .txtplików:

# .gitignore to keep just .txt files
###################################

# Filter everything...
*

# ... except the .gitignore...
!.gitignore

# ... and all text files.
!*.txt

(„#” oznacza komentarze.)

sjas
źródło
3
Sam lubię tę praktykę. Gdyby w tych katalogach był kod źródłowy, nie byłoby potrzeby .gitkeep, a ogólnie rzecz biorąc, to temp / cache / user content, który podczas testowania i tak byłby generowany, powodując, że musiałbyś również
.gitignore
1
Dlaczego potrzebujesz !przed .gitignore? Czy to po to, by uciec przed kropką?
Czy
7
@Will - Nie, !neguje następną część, jak zwykle w programowaniu.
sjas,
3
Nie ma potrzeby umieszczania !.gitignorepliku git ignore, ani dodawania pliku, ani edytowania go, ani wymuszania dodawania go z odpowiednią zawartością („*”, aby zignorować wszystko lub nic, aby po prostu upewnić się, że folder istnieje). Dalszy przykład .
AD7six
13
Z Twojego linku: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ Jeśli tak nie jest, a nie dodajesz siły, możesz o tym zapomnieć. W trywialnych przypadkach nie ma problemu, ale jeśli jest to większy plik, możesz być zdenerwowany. Używanie !.gitignorezapobiega strzelaniu sobie w stopę. Wolę to, bo się kiedyś spaliłem.
sjas
125
.gitignore

to plik tekstowy zawierający listę plików w twoim katalogu, które git zignoruje lub nie doda / zaktualizuje w repozytorium.

.gitkeep

Ponieważ Git usuwa lub nie dodaje pustych katalogów do repozytorium, .gitkeep jest rodzajem włamania (nie sądzę, że jest oficjalnie nazwany jako część Git), aby utrzymać puste katalogi w repozytorium.

Po prostu zrób to, touch /path/to/emptydirectory/.gitkeepaby dodać plik, a Git będzie mógł teraz utrzymywać ten katalog w repozytorium.

Jim Munro
źródło
18
Możesz mieć tyle .gitignores, ile chcesz, jeśli nie chcesz za każdym razem określać pełnej ścieżki do każdego folderu.
sjas
1
Próbuję wspomnieć o pustej liście katalogów w .gitkeeppliku, ale nie będzie śledzić pustych katalogów, Tylko ścieżka do folderu, w którym .gitkeepistnieje plik. dlaczego tak ?
Pardeep Jain
2
.gitkeep nie działa jak .gitignore. To nie jest lista katalogów do przechowywania. To tylko pusty plik, który znajduje się w katalogu, który chcesz przechowywać. Może mieć dowolną nazwę .keep itp. Możesz mieć katalog taki jak / foo / bar, a plikiem gitkeep będzie /foo/bar/.gitkeep
Jim Munro
@sjas, w jaki sposób wielokrotne zapisy .gitignoreuratowałyby Cię przed określeniem pełnej ścieżki do każdego folderu za każdym razem? Myślę, że brakuje mi czegoś oczywistego.
Willwsharp,