2017-02-26 1 views
1

J'essaie d'utiliser .gitkeep mais peu importe ce que j'ai essayé, ça ne marche pas.comment puis-je utiliser git pour suivre la structure des dossiers?

Par exemple, j'eu une structure de dossiers comme celui-ci:

. 
├── a 
│   ├── aa 
│   │   ├── aaa 
│   │   │   ├── .gitkeep 
│   │   │   └── test.txt 
│   │   ├── .gitkeep 
│   │   └── test.txt 
│   ├── .gitkeep 
│   └── test.txt 
├── b 
│   ├── bb 
│   │   ├── bbb 
│   │   │   └── test.txt 
│   │   ├── .gitkeep 
│   │   └── test.txt 
│   └── test.txt 
└── .gitignore 

J'ai eu le .gitignore comme ceci:

* 
!a/.gitkeep 
!*/.gitkeep 
!**/.gitkeep 
!.gitignore 

L'idée est de garder tous les dossiers avec .gitkeep. Étonnamment, aucun dossier ne sera suivi avec cette config.

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?

+0

Vous avez seulement besoin '.gitkeep' fichiers dans les répertoires qui n'ont rien d'autre en eux. Dans votre cas, les différents fichiers 'test.txt' les rendent redondants. – jonrsharpe

Répondre

1

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?

Pour cela, vous avez git check--v ignorer

En second lieu, it is not possible to re-include a file if a parent directory of that file is excluded

Et * serait ignorer les dossiers aussi bien, faire toutes les autres règles d'exclusion discutables.

Pour exclure le .gitkeep uniquement (et ignorer le contenu du dossier qui est conservé), ignorer uniquement les fichiers, puis les dossiers de la liste blanche, enfin exclure (parmi tous les fichiers ignorés) les .gitkeep.

/** 
!/**/ 
!.gitkeep 

Mais si l'objectif est de pas ignorer tous les fichiers dans des dossiers où il y a une .gitkeep en elle, alors vous auriez besoin d'exclure un dossier un par un:

/** 
!/**/ 
!/a/aa/aaa/** 
!/b/bb/bbb/** 
+0

Merci beaucoup! '!/** /' est la clé. '/ **' et '*' ont effectivement le même effet. – Wang