Quali sono le differenze tra .gitignore e .gitkeep?


1927

Quali sono le differenze tra .gitignoree .gitkeep? Sono la stessa cosa con un nome diverso o entrambi svolgono una funzione diversa?

Non riesco a trovare molta documentazione su .gitkeep.

Risposte:


3442

.gitkeep non è documentato, perché non è una funzionalità di Git.

Git non può aggiungere una directory completamente vuota . Le persone che vogliono tenere traccia di directory vuote in Git hanno creato la convenzione di mettere i file chiamati .gitkeepin queste directory. Il file potrebbe essere chiamato qualunque cosa; Git non assegna alcun significato speciale a questo nome.

Esiste una convenzione concorrente sull'aggiunta di un .gitignorefile alle directory vuote per farle rintracciare, ma alcune persone lo vedono come confuso poiché l'obiettivo è quello di mantenere le directory vuote, non ignorarle; .gitignoreè anche usato per elencare i file che dovrebbero essere ignorati da Git quando si cercano file non tracciati.


414
Non sarebbe una soluzione migliore inserire un READMEfile nella sottodirectory altrimenti vuota che contiene un po 'di informazioni su cosa verrà usata per quella sottodirectory? Sembra confuso avere un file chiamato .gitkeepche in realtà non fa parte di Git.
domattina il

423
@tamouse molte volte, il percorso della directory vuota (ad esempio i nomi delle cartelle) è sufficiente per esprimere il suo scopo (esempi: template / cache, upload / pollici ecc.). In questi casi, mettere un readme in ognuno di questi sembra ridondante.
Halil Özgür

16
le persone che vogliono tenere traccia delle directory vuote dovrebbero indicare in un README che la directory deve essere creata o creare le directory usando il loro strumento di compilazione o qualunque strumento / i richieda l'esistenza della directory; /

32
@tamouse, @omouse: un .gitignorefile con due righe: *ed !.gitignoreè più che sufficiente chiarezza per comunicare ciò che sta succedendo. Se è necessaria ulteriore elaborazione, aggiungere un commento nella parte superiore del file utilizzando la # sintassi.
Droogans,

63
Vale la pena notare che il popolare framework Rails ha leggermente modificato questa convenzione usando i .keepfile invece di .gitkeeppreservare queste cartelle vuote, poiché git non è l'unico sistema di controllo del codice sorgente che non tiene traccia delle cartelle vuote. Maggiori dettagli qui: github.com/rails/rails/issues/2800
Claudio Floreani

330

.gitkeepè solo un segnaposto. Un file fittizio, quindi Git non dimenticherà la directory, poiché Git tiene traccia solo dei file.


Se si desidera una directory vuota e assicurarsi che rimanga 'pulito' per Git, creare un .gitignorecontenente le seguenti righe all'interno:

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

# Ignore all files in this dir...
*

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

Se desideri avere un solo tipo di file visibile su Git, ecco un esempio su come filtrare tutto, tranne .gitignore e tutti i .txtfile:

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

# Filter everything...
*

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

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

('#' indica commenti.)


3
Questa pratica mi piace da sola. Se ci fosse un codice sorgente in queste directory non ci sarebbe bisogno di .gitkeep e in generale sono i contenuti temp / cache / user che durante i test verrebbero comunque generati, causando la necessità anche di .gitignore di quei file
chrisan,

1
Perché hai bisogno !di fronte .gitignore? È per sfuggire al punto?
Sarà il

7
@Will - No, !nega la parte seguente, come accade di solito in programmazione.
sjas,

3
Non è necessario inserire !.gitignoreun file git ignore, aggiungere il file e poi modificarlo, oppure forzarlo con il contenuto appropriato ("*" per ignorare tutto o niente per assicurarsi semplicemente che la cartella esista) ulteriore esempio .
AD7,

13
Dal tuo link: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ Se non lo è, e non fai un'aggiunta forzata, potresti dimenticartene. In casi banali, nessun problema, ma se si tratta di un file più grande potresti essere sconvolto. L'uso !.gitignoreti impedisce di spararti al piede. Lo preferisco, essendomi bruciato in passato.
1414

125
.gitignore

è un file di testo che comprende un elenco di file nella directory che git ignorerà o non aggiungerà / aggiornerà nel repository.

.gitkeep

Poiché Git rimuove o non aggiunge directory vuote a un repository, .gitkeep è una specie di hack (non credo che sia ufficialmente chiamato come parte di Git) per mantenere le directory vuote nel repository.

Basta fare un touch /path/to/emptydirectory/.gitkeepper aggiungere il file e Git sarà ora in grado di mantenere questa directory nel repository.


18
Puoi avere quanti .gitignores vuoi, se non vuoi specificare il percorso completo di ogni cartella ogni volta.
sjas,

1
Provo a menzionare l'elenco di directory vuote nel .gitkeepfile ma non traccia le directory vuote, traccia solo la cartella dove .gitkeepesiste il file. perchè così ?
Pardeep Jain,

2
.gitkeep non funziona come .gitignore. Non è un elenco di directory da tenere in giro. È semplicemente un file vuoto che risiede nella directory che si desidera conservare. Può essere chiamato come vuoi .keep, ecc. Quindi puoi avere una directory come / foo / bar e il file gitkeep sarà /foo/bar/.gitkeep
Jim Munro

@sjas come ti farebbe .gitignorerisparmiare più s dal specificare ogni volta il percorso completo di ogni cartella? Penso che mi manchi qualcosa di ovvio.
Willwsharp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.