J'essaie d'utiliser un fichier .gitignore avec des motifs négatifs (lignes commençant par!), Mais cela ne fonctionne pas comme je m'y attendais.
À titre d'exemple minimal, j'ai la structure de répertoires suivante:
C:/gittest
-- .gitignore
-- aaa/
-- bbb/
-- file.txt
-- ccc/
-- otherfile.txt
et dans mon fichier gitignore, j'ai ceci:
aaa/
!aaa/ccc/
Ma compréhension (basée sur cette page doc ) est que le fichier aaa/ccc/otherfile.txt ne doit pas être ignoré, mais en fait git ignore tout sous aaa.
Suis-je en train de mal comprendre cette phrase: "Un préfixe facultatif! Qui annule le modèle; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus."?
BTW, c'est sur Windows avec msysgit 1.7.0.2.
Je pense que ce que vous voulez réellement faire, c'est:
aaa/*
!aaa/ccc
Vous lui dites "ne regardez pas dans aaa
" pour qu'il n'examine jamais le chemin aaa/ccc
. Si vous utilisez le caractère générique, il lit toujours le contenu de aaa
, puis chaque entrée correspond au caractère générique et est ignorée, sauf aaa/ccc
qui est remis en place.
Si vous souhaitez tout exclure dans aaa
, mais inclure aaa/ccc
et tout ce qui se trouve en dessous, vous devez utiliser:
aaa/*
!aaa/ccc
!aaa/ccc/*
La première ligne indique à git d'ignorer tout sous aaa
, la seconde lui dit de ne pas ignorer le dossier aaa/ccc
qui "active" la troisième ligne qui lui dit ensuite de ne pas ignorer tout ce qui se trouve sous aaa/ccc
.
Si quelqu'un ne voit toujours pas les nouveaux éléments non ignorés dans un git status
exécuter un git update-index
au préalable peut aider git à voir les changements (au moins dans la version 1.9.x de gitbash).