2016-11-01 1 views
2

je les suivantes:Utiliser git propre pour supprimer un répertoire untracked mais pas supprimer un sous-répertoire dans ce répertoire

C:\src\MyUntrackedDir 
C:\src\MyUntrackedDir\SubDirToBeDeleted1 
C:\src\MyUntrackedDir\SubDirToBeDeleted2 
C:\src\MyUntrackedDir\SubDirToBePreserved 

Je veux être en mesure de supprimer C:\src\MyUntrackedDir\SubDirToBeDeleted1 et C:\src\MyUntrackedDir\SubDirToBeDeleted2, mais je ne pas veulent C:\src\MyUntrackedDir\SubDirToBePreserved à supprimer.

Je pensais que cela devrait fonctionner:

git clean -f -d -x -e C:\src\MyUntrackedDir\SubDirToBePreserved 

Mais que tout finit par supprimer tout C:\src\MyUntrackedDir, y compris C:\src\MyUntrackedDir\SubDirToBePreserved.

Comment puis-je résoudre ce problème?

Répondre

2

D'abord et avant tout, les règles peuvent être difficiles. Il est crucial de ne pas exécuter git clean -f ... à l'aveuglette. Remplacer -f avec -n d'abord, et observer ce qui se passerait. Si la sortie semble bonne, seulement alors remplacer le -n avec -f.


Si un répertoire parent est sélectionné pour le retrait (MyUntrackedDir dans votre exemple), vous ne pouvez pas exclure des éléments à l'intérieur, ils seront tous supprimés. Vous auriez pu préserver SubDirToBePreserved cette façon, par exemple:

C: 
cd src 
git clean -f -d -x -e MyUntrackedDir\SubDirToBePreserved MyUntrackedDir 

De cette façon, MyUntrackedDir lui-même n'est pas sélectionnée pour le retrait, que son contenu, à l'exception du MyUntrackedDir\SubDirToBePreserved exclu.

Une autre alternative qui fonctionne également:

C: 
cd src\MyUntrackedDir 
git clean -f -d -x -e SubDirToBePreserved