Come escludere il file solo dalla cartella principale in Git


399

Sono a conoscenza dell'utilizzo del .gitignorefile per escludere l'aggiunta di alcuni file, ma ho diversi config.phpfile nell'albero dei sorgenti e ho bisogno di escluderne solo uno, situato nella radice, mentre altri rimangono sotto controllo di revisione.

Cosa dovrei scrivere .gitignoreper farlo accadere?

Risposte:


589

Dalla documentazione :

Se il modello non contiene una barra /, git lo considera come un modello glob shell e verifica una corrispondenza con il nome percorso relativamente alla posizione del file .gitignore (rispetto al livello superiore dell'albero di lavoro se non da un file .gitignore file).

Una barra iniziale corrisponde all'inizio del nome percorso. Ad esempio, "/*.c" corrisponde a "cat-file.c" ma non a "mozilla-sha1 / sha1.c".

Quindi dovresti aggiungere la seguente riga alla tua radice .gitignore:

/config.php

1
Grazie! L'ho provato in questo modo, ma per qualche motivo non ha funzionato. Probabilmente
sbagliato a scrivere

1
Cosa succede se non è un file, ma una cartella, e voglio ignorare quella cartella nella radice repo, i suoi file contenuti e tutte le sottocartelle discendenti e i loro file? /folder/?
CodeManX,

11
Funzionerebbe /folder/o /folderfunzionerebbe, ma l'aggiunta della barra alle estremità limita la corrispondenza solo alle cartelle. Se avessi un file chiamato "pippo" nella directory principale, /foo/non lo ignorerebbe, ma lo /foofarebbe.
TehDorf

Se hai già eseguito il commit del file, esegui il comando git rm --cached <file>, altrimenti il ​​file non verrà ignorato. Da: stackoverflow.com/a/1274447
Bruno Polo,


29

Le versioni precedenti di git richiedono innanzitutto di definire un modello ignore e di definire immediatamente (nella riga successiva) l'esclusione. [testato sulla versione 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Le versioni successive richiedono solo quanto segue [testato sulla versione 2.2.1]

/config.php

17

Se la soluzione di cui sopra non funziona per te, prova questo:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

Questo funziona davvero per me, mentre il /config.phpsolo no. Sono curioso di sapere perché non è così. Hai un'idea?
iago-lito 'considerando di lasciare il

@ iago-lito se lavori su un particolare progetto e stai lottando su questo come ignorare un file .xtxt in una particolare directory e allo stesso tempo NON ignorarlo da nessun'altra parte, inseriscilo nel file /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext OR file.ext per ignorare il file ovunque e quindi nella cartella / home / me / path / to / my / project / some / .gitignore file inserisci questo! file.ext per NON ignorare questo file solo in questa particolare directory. Ogni cartella può avere il proprio file
.gitignore per sovrascrivere le

Hm. Ciò significa che il repository potrebbe comportarsi in modo diverso a seconda che altri utenti dispongano di ~/.gitignorefile diversi sui propri computer , giusto? .. Inoltre, il mio punto era: hai scritto "Se la soluzione di cui sopra non funziona", perché non dovrebbe?
iago-lito 'pensando di lasciare l'

sì, se il tuo progetto potrebbe esistere in un ambiente sconosciuto, non dovresti mai fare affidamento sui file .gitignore che si trovano sopra la cartella principale del tuo progetto. Ricorda che il nome del file come config.php è abbastanza comune, quindi sovrascrivi qualsiasi impostazione esistente per questo file nel tuo file .gitignore di root.
droga
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.