2009-08-14 19 views
123

Mes programmes génèrent généralement des fichiers de sortie énormes (~ 1 Go) que je ne veux pas sauvegarder sur le dépôt git. Ainsi, au lieu d'être en mesure de faireExiste-t-il un moyen de dire à git d'inclure uniquement certains fichiers au lieu d'ignorer certains fichiers?

git add . 

Je dois faire quelque chose comme

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

qui est un peu encombrant ...

Je me sens assez confiant que je pourrais écrire perl Quicky script ls le contenu du répertoire dans .gitignore, puis supprimer les fichiers basés sur un fichier .gitinclude (ou un nom similaire), mais cela semble un peu trop hackish. Y a-t-il un meilleur moyen?

Répondre

159

Je n'ai pas eu besoin d'essayer cela moi-même, mais d'après ma lecture de TFM, il semble qu'un motif négatif ferait ce que vous voulez. Vous pouvez remplacer les entrées de .gitignore par des entrées niées plus tard. Ainsi, vous pouvez faire quelque chose comme:

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

Pour avoir ignorer tous les fichiers .c sauf custom.c et quoi que ce soit en commençant par « frob_ »

+14

de Merci, TED Cela a fonctionné. Tout ce que je devais faire était de démarrer le fichier .gitignore avec *, puis de lister tous mes motifs de fichiers inclus en procédant par un point d'exclamation. –

+5

Que diriez-vous des dossiers? Je ne peux pas trouver un moyen d'inclure des dossiers et des fichiers à l'intérieur en annulant une règle. –

+1

À propos des dossiers s'il vous plaît vérifier http://stackoverflow.com/questions/12799855/configure-git-to-track-only-one-file-extension – uzsolt

58

créer .gitignore fichier dans votre répertoire et que vous voulez seulement suivre fichiers c et ignorer tous les autres fichiers, puis ajoutez les lignes suivantes à lui ....

* 
!*.c 

« * » ignorera tous les fichiers

et! annulerait les fichiers à être ignoré .... donc ici que nous demandons git de ne pas ignorer les fichiers c ....

+0

Avez-vous aussi besoin de '. *' pour les fichiers cachés? – trusktr

+1

Le '*' est un joker même pour '.', donc les fichiers cachés sont également ignorés, mais tous les fichiers cachés se terminant par' .c' sont inclus. – Rohmer

+2

En utilisant cette méthode, je pense que les fichiers des sous-dossiers sont également ignorés. Cochez cette case pour plus de détails http://stackoverflow.com/a/11853075/739436 – popas

2

La meilleure solution pour atteindre cet

créer un fichier .gitignore dans le référentiel root, et si vous voulez inclure uniquement .c fichier, vous devez ajouter des lignes ci-dessous pour .gitignore fichier

*.* 
!*.c 

cela inclura tous les fichiers .c à partir du répertoire et sous-répertoire récursive.

utilisant

* 
!*.c 

ne fonctionnera pas sur toutes les versions de git.

testé sur

version git 2.12.2.windows.2

+0

Oui, j'ai eu le même problème avec '*', et j'ai dû utiliser '*. *'. C'est sur Windows en utilisant gitbash et git version 2.9.0.windows.1 –

0

Utilisez cette gitignore

*.* 
!*.c 

testé avec la version 2.7.4 git