2011-10-07 17 views
6

Tengo un proyecto de Android que tiene un módulo de prueba que eliminará y volverá a crear archivos .apk en un subdirectorio en el directorio git..gitignore y git rm --cached no mantendrá los archivos a rastrear

que han añadido a estos .gitignore (el directorio, los archivos de forma explícita, y * .apk) y luego me han hecho

git rm -r --cached src/main/Tests/bin 

y git me dice:

rm 'src/main/Tests/bin/Tests-debug-unaligned.apk' 
rm 'src/main/Tests/bin/Tests-debug.apk' 
rm 'src/main/Tests/bin/Tests.ap_' 
rm 'src/main/Tests/bin/classes.dex' 

i luego

git commit . -m "removed apk files" 

Ejecuto nuevamente las pruebas que eliminan los archivos y los vuelven a crear. Ejecuto el estado de git y aparecen como modificados. Parece que .gitignore no está funcionando. Aquí está mi archivo .gitignore

*ipr 
*iml 
*iws 
.gitignore 
out/ 
*apk 
src/main/Tests/bin 
src/main/Tests/bin/* 
src/main/Tests/bin/Tests-debug-unaligned.apk 
+0

es que debido a que no se ha añadido a ellos para .gitignore después de haberlos eliminado? –

Respuesta

1

Acabo de probar su receta y funcionó para mí.

~ % mkdir deleteme 
~ % cd deleteme 
~/deleteme % mkdir src src/main src/main/Tests src/main/Tests/bin 
~/deleteme % touch src/main/Tests/bin/blah.apk     
~/deleteme % git init 
Initialized empty Git repository in /Users/sri/deleteme/.git/ 
~/deleteme (master*) % touch src/main/hello.txt 
~/deleteme (master*) % git add . 
~/deleteme (master*) % git commit -m "init" 
[master (root-commit) 0ef5764] init 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 src/main/Tests/bin/blah.apk 
create mode 100644 src/main/hello.txt 
~/deleteme (master) % vi .gitignore 
~/deleteme (master) % git rm -r --cached src/main/Tests/bin 
rm 'src/main/Tests/bin/blah.apk' 
~/deleteme (master*) % git commit -m "removed" 
[master 5ca6456] removed 
0 files changed, 0 insertions(+), 0 deletions(-) 
delete mode 100644 src/main/Tests/bin/blah.apk 
~/deleteme (master) % touch src/main/Tests/bin/blah.apk  
~/deleteme (master) % git status 
# On branch master 
nothing to commit (working directory clean) 
~/deleteme (master) % 

Quizás el gitconfig en algún otro directorio (o una directiva global) que está anulando lo que tiene en la gitconfig que han declarado. No mencionó donde se encuentra este gitconfig. Consulte la página de manual de gitignore o los documentos de ayuda en línea para conocer la precedencia de las distintas ubicaciones donde puede especificar las reglas de ignorar. Las páginas man dicen ...

... el siguiente orden de precedencia , de mayor a menor (dentro de un nivel de precedencia, el último juego patrón decide el resultado): Patrones leídos desde el comando línea para aquellos comandos que admiten ellos.

o Patterns read from a .gitignore file in the same directory as the path, or in any 
     parent directory, with patterns in the higher level files (up to the toplevel of the 
     work tree) being overridden by those in lower level files down to the directory 
     containing the file. These patterns match relative to the location of the .gitignore 
     file. A project normally includes such .gitignore files in its repository, containing 
     patterns for files generated as part of the project build. 

    o Patterns read from $GIT_DIR/info/exclude. 

    o Patterns read from the file specified by the configuration variable core.excludesfile 
0

que han intentado apenas

*.apk 

en su .gitignore? Si fueron rastreados antes, tendrá que eliminarlos y confirmarlos antes de configurar .gitignore. Una vez que están fuera, agregue la entrada en el archivo .gitignore y debería funcionar.

+0

comprometo las eliminaciones de los archivos. Sé que entonces "debería funcionar", pero no es así. – browep

+0

* apk, así como el directorio en el que se encuentran y una ruta absoluta solo por si acaso, el mismo resultado – browep

+2

limpia el archivo .gitignore para no tener ninguna entrada .apk. Cometer. Eliminar los archivos apk. git add -A y commit. Simplemente agregue * .apk al archivo de ignorar. cometer. ahora debería estar ignorando los archivos correctamente. Puede aplastar todo este trabajo de limpieza en una confirmación haciendo un reinicio de git --soft head ~ 3 && git add -A && git commit -m "fixed ignore" –

27

Creo que se necesita para limpiar todos los archivos stagged usando:

git rm -r --cached . 

git add -A 

luego confirmar:

git commit -m ".gitignore" 

Pero asegúrese de confirmar sus cambios antes de hacer esto.

Cuestiones relacionadas