C'è un modo per dire a git di includere solo determinati file invece di ignorare determinati file?


166

I miei programmi generano generalmente enormi file di output (~ 1 GB) di cui non voglio eseguire il backup nel repository git. Quindi, invece di essere in grado di fare

git add .

Devo fare qualcosa del genere

git add *.c *.cc *.f *.F *.C *.h *.cu

che è un po 'ingombrante ...

Sono abbastanza fiducioso di poter scrivere rapidamente uno script perl come contenuto della directory in .gitignore e quindi rimuovere i file basati su un file .gitinclude (o un nome simile), ma sembra un po 'troppo hacker. C'è un modo migliore?

Risposte:


232

Non ho avuto bisogno di provarlo da solo, ma dalla mia lettura di TFM sembra che uno schema negato farebbe quello che vuoi. È possibile sovrascrivere le voci in .gitignore con voci successivamente negate. Quindi potresti fare qualcosa del tipo:

*.c
!frob_*.c
!custom.c

Per far sì che ignori tutti i file .c tranne custom.c e tutto ciò che inizia con "frob_"


20
Grazie, TED Questo ha funzionato. Tutto quello che dovevo fare era avviare il file .gitignore con * e quindi elencare tutti i miei modelli di file inclusi, seguiti da un punto esclamativo.
Daisy Sophia Hollman,

8
Che ne dici di cartelle? Non riesco a trovare un modo per includere cartelle e file all'interno annullando una regola.
Marcio Cruz,

4
Informazioni sulle cartelle si prega di controllare stackoverflow.com/questions/12799855/...
uzsolt

2
molto bella. Sto usando questo per avere un repository nella mia cartella home per cose come vimrc e bashrc
Martin Capodici,

1
@uzsolt non funziona se si desidera includere una cartella specifica. vedi stackoverflow.com/questions/987142/…
DiCaprio il

73

crea il file .gitignore nel tuo repository e vuoi tracciare solo i file c e ignorare tutti gli altri file, quindi aggiungere le seguenti righe ad esso ....

*
!*.c

'*' ignorerà tutti i file

e ! negherà che i file vengano ignorati ... quindi qui stiamo chiedendo a git di non ignorare i file c ....


Hai bisogno anche .*di file nascosti?
trusktr,

2
Il *è un jolly anche per .i file in modo nascosti sono ignorati, ma i file nascosti poi tutti finiscono in .csono inclusi.
Rohmer,

2
Utilizzando questo metodo penso che anche i file delle sottocartelle vengano ignorati. Controlla questo per maggiori dettagli stackoverflow.com/a/11853075/739436
Stelian

1
Ho usato questo metodo nella mia directory home per tracciare solo il mio .bashrc e .bash_history ad esempio *seguito dal !.bash*file
.gitignore

1
Potresti aver bisogno di *.*Windows - vedi la risposta di @Smaranjit Maiti
Martin Capodici

13

La migliore soluzione per raggiungere questo obiettivo

creare il .gitignorefile nel repository roote se si desidera includere solo il .cfile, è necessario aggiungere le righe seguenti al .gitignorefile

*.*
!*.c

questo includerà .cricorsivamente tutti i file dalla directory e dalla sottodirectory.

utilizzando

*
!*.c

non funzionerà su tutte le versioni di git.

Testato su

versione git 2.12.2.windows.2


2
Sì, ho avuto lo stesso problema *e ho dovuto usarlo *.*. Questo è su Windows usando gitbash e git versione 2.9.0.windows.1
Martin Capodici

2

Se devi ignorare i file ma non un file specifico all'interno di una directory, ecco come l'ho fatto:

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt

0

In ritardo alla festa, ma la mia soluzione sarebbe quella di avere una directory per i file di origine e una directory diversa per gli eseguibili e l'output del programma, qualcosa del genere:

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

... e poi aggiungi solo le cose src/ mio repository e lo ignoro del bin/tutto.

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.