Ignore las modificaciones después de git add -f

Acabo de download (¡no clonado!) CakePHP 2.2.4. El directory contiene un file .gitignore :

 # only the relevant part here /app/Config /app/tmp 

Ahora ejecuté estos commands porque los directorys (y sus contenidos iniciales) Config y tmp nunca se habrían confirmado:

 git add -f Config git add -f tmp 

No tengo problemas con el directory tmp porque no hay files cambiados allí, ¡solo se crearán nuevos files!

Por el contrario, tuve que modificar algunos files (por ejemplo, la configuration de la database) en la carpeta Config . ¡Pero ahora Git quiere que vuelva a git add estos files modificados!

¿Cómo puedo ignorar estas modificaciones?

También podría reiniciar todo el repository de Git porque no creé / modifiqué demasiado.


Mis modificaciones a CakePHP para resolver el problema real

Mi nuevo file *.gitignore para CakePHP:

 # removed: /app/Config/ # start edit /app/Config/* !/app/Config/Schema/ !/app/Config/*.default.php # end edit /app/tmp /lib/Cake/Console/Templates/skel/tmp/ /plugins /vendors /build /dist .DS_Store /tags 

También sufijo todos los files en / app / Config con .default :

  • acl.ini.default.php.

  • acl.default.php.

  • bootstrap.default.php.

  • core.default.php.

  • database.php.default -> database.default.php

  • email.php.default -> database.default.php

Editar: es mejor tener *.default.php que *.php.default porque esto evita que el file se *.php.default al browser si falla mod_rewrite (aunque eso es muy poco probable).

Git no rastrea directorys; solo files Entonces, cuando ejecuta git add -f Config , git simplemente agrega todos los files en el tree de trabajo debajo de Config , no en el directory en sí. Dado que estos files son seguidos por Git (anulando así las reglas de ignorar), cambiarlos hará que Git considere que el tree de trabajo está sucio.

Estas reglas para Config y tmp existen en el file .gitignore de CakePHP porque Git puede ignorar todo el directory; no es necesario crear explícitamente directorys vacíos, ya que CakePHP presumiblemente los creará automáticamente.

Si por alguna razón quieres que Git sepa que debe haber un directory allí, pero para ignorar su contenido, entonces puedes agregar un file .gitignore dentro de Config y tmp contenga la regla * , que le dirá que ignore todo lo que directory. Sin embargo, dado que el file .gitignore está allí, mantendrá el directory en sí mismo.


Actualización: si desea almacenar una configuration "pnetworkingeterminada" en Git que se va a personalizar según la copy de trabajo, es mejor que se confíe un file de configuration de plantilla con un nombre diferente que se puede copyr a uno nuevo ( ignorado) cuando el repository se clona y se completa con opciones de configuration específicas del entorno.

Tal como lo veo, los files de configuration no deben mantenerse bajo control de versión, ya que deben adaptarse al entorno en el que se está utilizando la copy de trabajo, por lo que mantener las copys de la plantilla de esta manera parece la solución natural (esto es lo que WordPress hace).