2009-03-17 29 views
152

¿Puedo decirle a git que ignore los archivos que se modifican (eliminan) pero que no se deben comprometer?Ignorar archivos modificados (pero no confirmados) en git?

La situación es que tengo un subdirectorio en el repositorio que contiene cosas que no me interesan para nada, así que lo eliminé para evitar que apareciera en autocompletaciones y similares (en el IDE).

Pero ahora, si agrego esa carpeta a .gitignore, simplemente nada cambia, todo el material se muestra como eliminado por el estado de git.

¿Hay alguna manera de hacer que Git lo ignore de cualquier manera?

(Alternativamente, como estoy usando git-svn, ¿podría confirmar los cambios en el tracto gastrointestinal local y asegurar que no se transmiten al repositorio SVN?)

+0

en lugar de simplemente marcándolos como no modificado en el índice de recompra, puede que desee eliminarlos del índice completamente. Por lo tanto, aunque todavía tendrá el archivo en su directorio de trabajo, el índice de repos puede ser delicado por completo, y git ni siquiera verá que haya existido en absoluto. Por favor, mira el enlace en mi respuesta a continuación. – MaurerPower

Respuesta

231

la git-update-index man page y el --assume-inalterado b y relacionado.

cuando tengo el problema que ello

git update-index --assume-unchanged dir-im-removing/ 

o un archivo específico

git update-index --assume-unchanged config/database.yml 
+0

Esto funciona muy bien para archivos modificados. Sin embargo, cuando elimino el directorio (ya sea con 'rm' o 'git rm'), los archivos aparecen como desaparecidos/eliminados en 'estado de git'. Creo que aceptaré esto como una respuesta y volveré a formular la pregunta que pregunta explícitamente sobre los archivos eliminados. (Al principio, no sabía que había una gran diferencia;) ¡Gracias! –

+3

¿Puede enumerar todos sus archivos ignorados de alguna manera? – Zitrax

+4

Zitrax, sí, consulte http://stackoverflow.com/questions/2363197/ –

6

archivos orugas no pueden ser ignorados, así que primero tendrá que eliminarlos de su índice. Agregue un .gitignore que ignore los directorios que no desea, luego bórrelos y elimine los rezagados con git rm --cached.

+0

Hm, pruebo esto, pero luego tengo todos los archivos listados como eliminados. ¿Debería comprometer eso y el caché causará que no sea empujado a los controles remotos? ¿O conseguí algo? ¿incorrecto? Lo más importante para mí es no corromper el repo remoto (svn). –

+1

No puede comprometer nada que no comience en su índice. git rm: guardó en caché todo lo que no desea confirmar, luego agrega un archivo .gitignore localmente que tiene "*" en él. Ahora, no importa cuánto agregue Git, nunca volverá a ver esos archivos en su índice. –

+0

Ah, creo que entiendo, caché ahora ...Solo elimina las cosas del índice y deja el árbol funcionando solo. No estoy seguro de si me falta algo, pero AFAIS estoy buscando lo contrario, eliminándolo del árbol de trabajo sin tocar el índice. ¿O puedo usarlo para eso de alguna manera? –

4

Lo que suelo hacer es

git alijo

git lo-lo demás

alijo git aplican

git alijo clara cheque

+9

fwiw también puede 'git stash pop' para hacer esos dos últimos a la vez (aunque 'git stash clear' borrará TODAS las entradas ocultas, si así lo desea). – Groxx

36

Una opción nueva y mejor es git update-index --skip-worktree que no se pierde en un restablecimiento completo o una nuevo cambio de un tirón.

Consulte la página del manual en http://schacon.github.com/git/git-update-index.html

y una comparación en http://fallengamer.livejournal.com/93321.html

+8

Una desventaja a tener en cuenta es que una vez que las modificaciones de un archivo se han ocultado con 'skip-worktree', encontrar estos archivos es un poco engorroso. La única forma que conozco es 'git ls-files -v | grep -v '^ H''. Además, muchas herramientas GUI no conocen esta función y pueden producir errores graciosos si, p. un 'pago' falla debido a archivos modificados "ocultos". – sleske

+0

+1 sleske, como ese comando me salvó después de que "salte" un archivo accidentalmente! –

3

Usar este código

git update-index --assume-unchanged file-name 
+0

Muy interesante. Tengo que usar un passord en mi proyecto maven, pero no quiero publicarlo en un repositorio git, así que puse marcador de posición sin valor en local, propiedades, lo confirmo, luego inserto la contraseña, pero marque el archivo sin cambios con su comando sugerido. Entonces la contraseña no está publicada. –

Cuestiones relacionadas