.gitignore esclude i file nella directory ma non in alcune directory


98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Questo non sembra funzionare. Quando clono il progetto, non ci sono "application/cache"cartelle o "application/cache/folder"cartelle, ecc ...

Mi piacerebbe che i file nelle cartelle della cache non fossero memorizzati nella cache ma le cartelle lo fossero, in modo che le autorizzazioni delle cartelle vengano trasferite ed esistano.

Risposte:


220

Git non tiene traccia delle cartelle, solo dei file, quindi se ignori tutto in una cartella, Git non avrà nulla da monitorare. È possibile aggiungere un .gitignorefile per ogni directory ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) con i seguenti contenuti:

*
!.gitignore

Quindi, puoi aggiungere quelle directory e .gitignoreverrà aggiunto solo il file in ciascuna directory, ma questo significa che le directory verranno ora tracciate (cioè create durante la clonazione).


7
I file .gitignore utilizzati per questo scopo possono essere vuoti.
kevpie

2
Possono essere vuoti, se le cartelle vengono ignorate da un .gitignorefile superiore . In questo caso, è esattamente la mia risposta.
KingCrunch

4
più sensato e più semplice è usare un file chiamato .gitkeep, quindi non devi inserire nulla nel file .gitignore.
Riccio

3
@kevpie Ci sono altri file nella cartella e non vuole che vengano tracciati. Se il file .gitignore è vuoto, apparentemente quei file verranno tracciati.
maliayas

con lo stesso scopo, uso al .gitkeepposto di .gitignore. ha più senso per me
Éderson T. Szlachta

22

Git non tiene traccia delle directory vuote. Basta aggiungere alcuni file segnaposto vuoti nelle cartelle in cui si desidera eseguire il commit.

touch application/cache/.keep
git add -f application/cache/.keep

Fallo anche con ogni cartella "vuota". Successivamente puoi ignorare questi file, esistono davvero solo per assicurarti che git crei quelle directory su clone. Le voci in .gitignoreevitano che gli altri file all'interno delle cartelle vengano tracciati (a meno che tu non lo imponga con git add -f;)).


16

C'è un altro modo forse più pulito per farlo. Invece di avere file secondari .gitignore nelle cartelle che desideri conservare. Puoi metterlo nella root .gitignore come segue:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Ora crea e salva i file .gitkeep vuoti nelle directory come elencato sopra. La cartella verrà quindi tracciata con quei file .gitkeep ma nessuno dei contenuti verrà tracciato.


2
o semplicemente !*.gitkeep:)
Éderson T. Szlachta

La domanda era come ignorare il contenuto delle cartelle ma mantenere le cartelle stesse. Quindi credo che la mia risposta sia valida e il solo fatto di avere! *. Gitkeep non ignorerà il contenuto delle cartelle.
Joel Duckworth

3

puoi mettere un file .gitignore in ognuno di essi (come ha detto mipadi) o creare qualcosa del genere sul tuo file .gitingnore di root

/assets/*/
/assets/*.*

per me funziona bene


Funziona, ma solo se il repository utilizza estensioni di file. Qualcosa di simile root/LICENSE-FILEnon sarà escluso.
Brett Zamir

2

Visual Studio non ha gradito la risposta accettata. Ho dovuto aggiungere una nuova riga prima di * per farlo funzionare.

# Ignore all files in this folder.
*
!.gitignore
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.