'!' no excluye el file en .gitignore

mi file .gitignore :

 .DS_Store temp !temp/script.txt 

Sin embargo, cuando hago el git status , no muestra el directory temp/ para indicar que el script.txt no está en etapas. Solo muestra el file .gitignore :

 # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: .gitignore 

Solo estoy aprendiendo git. ¿Alguna idea de dónde estoy yendo mal?

Reemplace la temp con:

 temp/* 

Esto ignora todos los files en el directory. En la mayoría de los casos, temp , temp/ y temp/* funcionan todos igual porque en los dos primeros casos, el directory se ignora, mientras que en el tercer caso, Git no rastrea los directorys vacíos. Por lo tanto, el directory en sí será ignorado.

Para ilustrar esto, esto es esencialmente lo que sucede cuando temp/ tiene temp1.txt temp2.txt temp3.txt :

 temp # anything with the name of "temp"; a directory, a symlink, a file. temp/ # whole of temp dir temp/* # temp/temp1.txt temp/temp2.txt temp/temp3.txt 

Por lo tanto, el tercer caso funcionará en su caso.

El patrón de negación debe colocarse después del patrón que lo cubre. En este caso !temp/script.txt debe venir después de temp/* . De lo contrario, no se aplicará.

Por lo tanto, su último file .gitignore debería verse así:

 .DS_Store temp/* !temp/script.txt 

Los directorys de notas no están versionados en git

Use un .gitignore de

 temp/* !temp/script.txt 

Tenga en count que el order es muy importante (primero tuve este error, por lo que casi llegué a la conclusión de que no se podía hacer)