Ignorare le directory nei repository Git su Windows


1106

Come posso ignorare directory o cartelle in Git usando msysgit su Windows?


Vuoi che la cartella cache sia completamente esclusa dal repository o solo il suo contenuto?
Gareth,

1
Immagino che l'OP abbia più directory della cache, i cui contenuti dovrebbero essere ignorati, ma vuole assicurarsi che tali directory vengano create per chiunque cloni il repository.
Mark Longair,

@Gareth: poiché le cartelle vuote non vengono monitorate con git, se il contenuto viene ignorato, lo sarà anche la cartella, no?
Controlla il

3
L'ho detto solo perché alcune persone usano file nascosti (comunemente .gitkeep) per indicare una directory che dovrebbe essere mantenuta
Gareth,

2
è /alla fine ciò che lo fa sapere che è una directory che dovrebbe ignorare?
Charlie Parker,

Risposte:


1595

Crea un file chiamato .gitignorenella directory del tuo progetto. Ignora le directory inserendo il nome della directory nel file (con una barra aggiunta):

dir_to_ignore/

Ulteriori informazioni sono qui .


130
Nel prompt di cmd di Windows è possibile utilizzare 'modifica .gitignore' o 'blocco note .gitignore' per creare il file corretto.
Joey Green,

44
Oppure puoi anche usare 'touch .gitignore' dal prompt dei comandi di windows git bash e questo creerà il file con il nome corretto che può a sua volta essere modificato da blocco note o simili ...
SGB

39
O semplicemente crea un file chiamato .gitignore. con explorer e modificarlo con il blocco note (il punto finale verrà rimosso). In questo modo non è necessario utilizzare il prompt dei comandi.
P. Galbraith,

6
Oppure potresti vim .gitignore dal terminale. :)
MollyCat,

34
Oppure, che sorprendentemente non è stato menzionato anche se è il modo più veloce, basta digitare "echo folder_to_ignore >> .gitignore" nella console.
Godsmith,

205

Per impostazione predefinita, Windows Explorer verrà visualizzato .gitignorequando in realtà il nome del file è .gitignore.txt.

Git non utilizzerà .gitignore.txt

E non puoi rinominare il file in .gitignore, perché Windows Explorer pensa che sia un file di tipo gitignore senza un nome.

Soluzione senza riga di comando:

Puoi rinominare un file in ".gitignore". e creerà ".gitignore"

46
Che funzioni? Ho sempre detto alle persone di aprire il blocco note e nella finestra di dialogo Salva con nome digitare il nome del file racchiuso tra virgolette doppie, quindi ad esempio ".gitignore"e lo salva senza aggiungere automaticamente un'estensione.
Arrowmaster,

9
Neat. Includere un periodo finale funziona. Explorer rimuove l'ultimo periodo, risultando in un file chiamato ".gitignore". Penso che il metodo delle virgolette sia più pulito e meno probabile che crei sorprese.
Triynko,

4
Oppure, nella finestra di dialogo Salva con nome, cambia il tipo di file in "Tutti i file ( . )" - quindi Windows non aggiungerà alcuna estensione.
Osaka Webbie,

5
o in git bash basta digitare "touch .gitignore" nella tua cartella
Rayjax,

3
".gitignore."- Questo è un grande trucco! Ho sempre avuto problemi anche con .htaccess...
Obmerk Kronen,

105

Sembra che per ignorare file e directory ci siano due modi principali:

  1. .gitignore

    • Posizionamento del .gitignorefile nella radice del repository oltre alla .gitcartella (in Windows, assicurati di vedere l'estensione del file vero e poi crea .gitignore.(con il punto alla fine per creare un'estensione del file vuota))
    • Effettuare la configurazione globale ~/.gitignore_globale in esecuzione git config --global core.excludesfile ~/.gitignore_globalper aggiungere questo alla tua configurazione Git

    Nota: i file tracciati in precedenza non possono essere monitorati eseguendo git rm --cached filename

  2. Repository exclude - Per i file locali che non devono essere condivisi, è sufficiente aggiungere il modello o la directory del file al file .git/info/exclude. Queste regole non vengono impegnate, quindi non vengono visualizzate da altri utenti . Ulteriori informazioni sono qui .

Per fare eccezioni nell'elenco dei file ignorati, vedere questa domanda .


36
buon lavoro sottolineando il git rm --cached <filename>. Assolutamente fondamentale per i pronti contro termine che esisteva prima della creazione del.gitignore
MaurerPower

2
git rm --cached <nomefile> risolto il problema con .gitignore :)
JeremyFelix

1
Sì, git rm - il nome del file nella cache è assolutamente cruciale. Mi stava facendo impazzire perché git stava ancora mettendo in scena i file che avevo chiaramente dichiarato ignorati (creato gitignore dopo il commit iniziale). Grazie mille!
Potaito,

1
Risolto il mio problema Git stava monitorando la cartella del fornitore nel mio repository laravel anche se avevo aggiunto la cartella del fornitore in gitignore. Molte grazie.
Jayant,

44

Ho avuto alcuni problemi durante la creazione di un file in Esplora risorse con .a all'inizio.

Una soluzione alternativa consisteva nell'entrare nella shell di comando e creare un nuovo file usando "modifica".


2
o semplicemente aggiungi un extra .alla fine in modo che explorer smetta di pensare che .gitignoresia l'estensione. Quindi all'ingresso quel punto finale senza estensione viene appena mangiato e ti viene lasciato con .gitignore TL; DR: prova a .gitignore..gitignore
chiamarlo

43

Per indicare a Git di ignorare determinati file o cartelle, è necessario creare un .gitignorefile.

Ma in Windows Explorer devi fornire un nome per il file. Non è possibile creare file con solo un'estensione. Il trucco è quello di creare un file di testo vuoto e andare al prompt dei comandi e modificare il nome del file in .gitignore:

ren "New Text Document.txt" .gitignore

Ora apri il file con il tuo editor di testo preferito e aggiungi i nomi di file / cartelle che desideri ignorare. È inoltre possibile utilizzare i caratteri jolly come questo: *.txt.


15
O semplicemente: echo dir_to_ignore /> .gitignore
Oliver

2
O type nul > .gitignoreper creare un file vuoto
Castro Roy,

O chiama semplicemente il file .gitignore.quando le estensioni dei file non sono nascoste in Esplora risorse di Windows
Vairis,

22

Se si desidera mantenere una cartella e non i file al suo interno, basta inserire un file ".gitignore" nella cartella con "*" come contenuto. Questo file farà in modo che Git ignori tutto il contenuto dal repository. Ma .gitignoresarà incluso nel tuo repository.

$ git add path/to/folder/.gitignore

Se aggiungi una cartella vuota, ricevi questo messaggio (.gitignore è un file nascosto)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Quindi, usa "-f" per forzare add:

$ git add path/to/folder/.gitignore -f

19

In Windows c'è un problema in più con le barre. Escludendo una singola directory in .gitignore con

dir_to_exclude /

probabilmente funzionerà, ma escludendo tutte le directory con

/

causa problemi quando hai nomi di file con spazi (come my file.txt) nella tua directory: Git Bash sfugge a questi spazi con una barra rovesciata (come my\ file.txt) e Git per Windows non distingue tra /e \.

Per escludere tutte le directory, utilizzare meglio:

** /

Due asterischi consecutivi indicano il contenuto della directory.


15

Anche nella \.git\infodirectory dei progetti c'è un file di esclusione che è effettivamente la stessa cosa di .gitignore(credo). È possibile aggiungere file e directory da ignorare in questo.


Mi piace questo approccio, non riesco proprio ad andare d'accordo con il percorso lì dentro, voglio ignorare una cartella nel repository principale, come?
Shimmy Weitzhandler,

Ma non dovresti lasciare i file in .git da solo (manipolare il contenuto con mezzi ufficiali)?
Peter Mortensen,

13

Nel caso in cui sia necessario escludere le sottocartelle, è possibile utilizzare il **carattere jolly per escludere qualsiasi livello di sottodirectory.

**/build/output/Debug/

12

Per ignorare un'intera directory in Git, il modo più semplice è includere un file .gitignore nella directory di destinazione che contenga semplicemente "*".

Un esempio illustrativo,

Sistema di esempio

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Obbiettivo

  • ignora il contenuto di / dirB /

Livello superiore .gitignore (/root/.gitignore)

  • Qui è dove vanno le tue informazioni standard su gitignore

Directory ignorata .gitignore (/root/dirB.gitignore)

  • Questo file si legge come '*' e la directory viene ignorata completamente, se stessa e tutti i file!

Ed è così semplice :)


10

Quando tutto il resto fallisce, prova a modificare il file

/.git/info/exclude

e aggiungendo le directory che vuoi alla fine del file, in questo modo:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Ho aggiunto le cartelle "risorse" e "compilate" all'elenco di file e directory da ignorare.


1
Sto usando Atom su Windows 10. Funziona! Grazie amico!
Putu De

Ho provato tutti gli altri con la mia configurazione attuale e questa è stata la mia risposta definitiva definitiva.
Xedret,

10

È possibile creare il file ".gitignore" con il contenuto:

*
!.gitignore

Per me funziona.


2
Questa è la risposta migliore, offre anche ulteriori vantaggi nella distribuzione e manutenzione del progetto.
Nitin ...

Chi è "simples" ?
Peter Mortensen,

9

Su Unix:

touch .gitignore

Su Windows:

echo > .gitignore

Questi comandi eseguiti in un terminale creeranno un .gitignorefile nella posizione corrente.

Quindi aggiungi semplicemente informazioni a questo .gitignorefile (usando Notepad ++ per esempio) quali file o cartelle dovrebbero essere ignorati. Salva le tue modifiche. Questo è tutto :)

Ulteriori informazioni: .gitignore


8

Ho avuto dei problemi nel far ritirare Git .gitignoresu Windows. Il $GIT_DIR/info/excludefile sembra sempre funzionare però.

L'aspetto negativo di questo approccio, tuttavia, è che i file nella $GIT_DIRdirectory non sono inclusi nel check-in e quindi non condivisi.

ps $GIT_DIRè di solito la cartella nascosta denominata.git


Sì, git su Windows è davvero pignolo su .gitignore - il file di esclusione locale fa quello che mi serve però. Grazie!
Andersop,

6

Presumo che il problema sia che il tuo albero di lavoro sia come:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... con .gitignorete descrivi. Questo ti daràgit status output come:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... se i index.htmlfile non sono ancora stati aggiunti al repository. (Git vede che ci sono file non firmati nelle directory della cache, ma riporta solo le directory.) Per risolvere questo problema, assicurati di aver aggiunto e eseguito il commit delindex.html file:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... e il tuo git status poi la volontà sarà simile a:

$ git status
# On branch master
# 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)

(Ovviamente anche tu vuoi impegnarti .gitignore. Ero solo pigro con questo caso di test.)


1
Probabilmente non vuole impegnare .gitignore soprattutto perché è molto probabile che vogliono tenere traccia delle modifiche ad esso, e così è la tua squadra (se si sta lavorando con una sola). Vedi stackoverflow.com/a/767213/123033
Dave Everitt il

2
@Dave Everitt: è esattamente per questo che ho detto "Ovviamente vuoi impegnare anche .gitignore".
Mark Longair,

6

Su Windows e Mac, se si desidera ignorare una cartella denominata Flower_Data_Folder nella directory corrente, è possibile eseguire:

echo Flower_Data_Folder >> .gitignore

Se è un file chiamato data.txt:

echo data.txt >> .gitignore

Se è un percorso come "Dati / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 

2

Ho avuto problemi simili. Lavoro su una catena di strumenti di Windows con un repository condiviso con ragazzi di Linux e creano felicemente file con gli stessi nomi (tranne il caso) in una determinata cartella.

L'effetto è che posso clonare il repository e avere immediatamente dozzine di file "modificati" che, se avessi fatto il check-in, avrebbero creato il caos.

Windows ha impostato la distinzione tra maiuscole e minuscole e Git in modo da non ignorare la distinzione tra maiuscole e minuscole, ma non riesce comunque (nelle chiamate dell'API Win32 apparentemente).

Se eseguo gitignore i file, devo ricordare di non tenere traccia del file .gitignore.

Ma ho trovato una buona risposta qui:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


Il collegamento sembra interrotto (reindirizza prima alla versione "https"): "Connessione protetta non riuscita. Si è verificato un errore durante una connessione a archive.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen,

0

Basta creare il .gitignorefile nella cartella del progetto Quindi aggiungere il nome della cartella in esso per es:

frontend/node_modules
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.