272 votes

Comment dire à Git d'ignorer tout ce qui n'est pas un sous-répertoire ?

Je veux ignorer tous les fichiers de mon référentiel, à l'exception de ceux qui se trouvent dans la section bin sous-répertoire. J'ai essayé d'ajouter ce qui suit à mon .gitignore :

*
!bin/*

Mais cela n'a pas l'effet escompté : j'ai créé un nouveau fichier à l'intérieur de bin/ mais en faisant git status montre encore nothing to commit (working directory clean) .

Des suggestions ?

0 votes

333voto

Tyler Laing Points 675

Cela permet d'ignorer les fichiers et les répertoires racine, puis d'ignorer le répertoire bin racine :

/*
/*/
!/bin/

Vous obtenez ainsi l'ensemble du répertoire bin, y compris les sous-répertoires et leurs fichiers.

31 votes

Pour une raison ou une autre, cela ne fonctionne pas systématiquement pour moi. J'ai les deux lignes /stuff/ y !/stuff/specific/ mais il ignore toujours /stuff/specific/.

1 votes

@LB-- J'ai eu un problème similaire, et git check-ignore -v m'a dit que c'était à cause de ~/.gitignore

0 votes

@gurneyalex J'ai découvert que cela se corrigeait tout seul si je supprimais le repo local et que je le re-clonais, cela doit être un bug.

142voto

Andrey Tischenko Points 248

Voici comment tout ignorer à l'exception d'un répertoire " MY_SUPER_DUPER_TEMPLATE_directory "dans un répertoire

Structure : /bitrix/templates/ MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore

3 votes

Cela a fonctionné à merveille pour désignoriser un paquetage de vendeur de Laravel que j'avais modifié ! Merci, vous m'avez évité bien des maux de tête.

0 votes

Cette réponse devrait être choisie comme la meilleure.

79voto

nikc Points 354

Vous devez exclure tout ce qui se trouve sur le chemin des destinations, mais vous devez inclure les destinations :

Note : Il s'agit d'un fichier d'exclusion (i.e. .gitignore) donc la logique est inversée. Ignorer tout, sauf le répertoire tsp, ignorer tout dans le répertoire tsp, sauf le répertoire src...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore

11 votes

+1 pour le principe d'inclure un répertoire, puis d'exclure son contenu, puis d'inclure le sous-répertoire souhaité, etc. J'ai fini par utiliser cette réponse dans mes projets.

0 votes

Quelques années plus tard, on se rend compte qu'il n'est plus nécessaire d'être aussi verbeux. Préciser la destination finale devrait suffire.

45voto

Charles Bailey Points 244082

Le seul problème que vous rencontrez est que le bin lui-même ne correspond pas au répertoire bin/* de sorte que git n'est même pas regardé dans le modèle bin répertoire.

Deux solutions viennent à l'esprit.

.gitignore :

*
!/bin/
!bin/*

ou

.gitignore :

*
!/bin/

bin/.gitignore :

!*

Je préfère la deuxième solution, car la première n'empêchera pas d'ignorer les fichiers dans le fichier bin qui se trouvent dans des sous-répertoires qui ne sont pas appelés bin . Cela n'a pas forcément d'importance dans votre situation.

2 votes

Cela n'a pas fonctionné pour moi. Je dois avoir un .gitignore comme celui-ci pour que cela fonctionne : # Ignore everything * # But not these files... !/wp-content/ !/wp-content/plugins/ !/wp-content/plugins/my_plugin/ !/wp-content/plugins/my_plugin/* Pas de code de blocage dans les commentaires ?

1 votes

Réponse de Tyler a une meilleure solution de fichier unique

12voto

Jake Points 556

Je pense qu'une meilleure solution serait d'ancrer chaque pattern au répertoire git supérieur en commençant le pattern par une barre oblique :

/*
!/public_html
!/.gitignore

Au lieu d'ignorer tous les fichiers, il n'ignorera que les fichiers de premier niveau, et non ceux qui se trouvent dans le répertoire que vous ne voulez pas ignorer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X