2012-06-04 14 views
34

Quiero excluir automáticamente 2 archivos de la confirmación, que son parte del repositorio git pero tienen algunos cambios, que no deberían ser parte del repositorio github, porque tienen algunos cambios que solo son significativos para mi sistema local y no para los otros desarrolladores.git no ignora 2 archivos específicamente nombrados

les añaden a .git/info/exclude con la esperanza git entiende que no se ha de cambios a ellos:

# git ls-files --others --exclude-from=.git/info/exclude 
# Lines that start with '#' are comments. 
# For a project mostly in C, the following would be a good set of 
# exclude patterns (uncomment them if you want to use them): 
# *.[oa] 
a.conf 
b.conf 
# *~ 

pero git status todavía las listas como puesta en escena por la comisión:

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# modified: build/conf/a.conf 
# modified: build/conf/b.conf 
# 

Pongo No quiero separarlos regularmente con cada confirmación (una vez podría olvidarlo), ¿cómo puedo hacer eso?

+2

¿Por qué no a '.gitignore'? – maverik

+5

No puede ignorar los archivos que está rastreando. Probablemente necesites encontrar otra forma de administrar la información específica del sistema local, como tener archivos de "plantilla" que generes o editar manualmente los archivos de configuración. –

+2

@maverik: si 'exclude' no funciona,' .gitignore' tampoco. El caso de uso para 'exclude' es que esta información es local, mientras que' .gitignore' puede registrarse y compartirse. Toma 'exclude' para tus cosas locales cuando no quieras explotar el' .gitignore'. Imagine un gran proyecto en el que cada desarrollador inserta sus exclusiones en '.gitignore'. Ya no sería manejable ... – eckes

Respuesta

92

Lo que desea es ignorar los cambios en los archivos rastreados. Esto no se puede lograr (como Charles Baileysays) correctamente, ni con .gitignore ni con .git/info/exclude.

Tendrá que utilizar git update-index:

git update-index --assume-unchanged build/conf/a.conf 
git update-index --assume-unchanged build/conf/b.conf 

logrará lo que quiere: los archivos siempre se asumen sin cambios.

Si desea rastrear cambios en estos archivos nuevamente, use --no-assume-unchanged.

Por último, si usted quiere saber qué archivos se encuentran actualmente en el modo de --assume-unchanged, pregunte git para

git ls-files -v | grep -e "^[hsmrck]" 
+0

¡Funciona muy bien para mí! – Gustyn

+1

Me sale 'fatal: no se puede marcar el archivo {path/to/file}' – Leo

+0

¿esta solución está vinculada a una rama? Seamos archivo1 y archivo 2 marcados como "asumir-sin cambios" en branch1. Luego checkout a branch2. ¿Están estos archivos marcados como "asumir-sin cambios" también? – nespapu

Cuestiones relacionadas