¿Git agrega que no funciona con files .png?

Tengo un tree de trabajo sucio, sucio porque realicé cambios en los files fuente y retoqué algunas imágenes. Estaba intentando agregar solo las imágenes al índice, así que ejecuté este command:

git add *.png 

Pero, esto no agrega los files. Hubo unos pocos files de image nuevos que se agregaron, pero ninguno de los que se modificaron / preexistieron se agregaron.

¿Lo que da?

Editar : Aquí hay alguna salida de terminal relevante

 $ git status # On branch master # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: src/main/java/net/plugins/analysis/FormMatcher.java # modified: src/main/resources/icons/doctor_edit_male.png # modified: src/main/resources/icons/doctor_female.png # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # src/main/resources/icons/arrow_up.png # src/main/resources/icons/bullet_arrow_down.png # src/main/resources/icons/bullet_arrow_up.png no changes added to commit (use "git add" and/or "git commit -a") 

Luego se ejecutó "git add * .png" (sin salida después del command)

Entonces:

 $ git status # On branch master # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: src/main/resources/icons/arrow_up.png # new file: src/main/resources/icons/bullet_arrow_down.png # new file: src/main/resources/icons/bullet_arrow_up.png # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: src/main/java/net/plugins/analysis/FormMatcher.java # modified: src/main/resources/icons/doctor_edit_female.png # modified: src/main/resources/icons/doctor_edit_male.png 

El comentario de Michael Mrozek es esencialmente la respuesta. *.png constring con los files de ese nombre en el directory actual, no en los subdirectorys. Si desea agregar uno en un subdirectory, hágalo:

 git add src/main/resources/icons/*.png 

O, dependiendo de tu caparazón, puedes hacer:

 git add **/*.png 

El punto es que es el shell el que hace globbing (expande * .png en una list de nombres de files). Git no tiene nada que ver con eso; simplemente toma los arguments que le da el caparazón.

Editar: Dado que esto logró ser aceptado, debería seguir adelante y señalar como otros hicieron que algunos commands de git admiten globbing internamente (a través de fnmatch), por lo que si cita un patrón global, se pasará sin modificaciones por el shell para git, donde tendrá lugar la expansión globbing.

Algunos de los commands de Git (incluido git add ) pueden manejar los patrones de nombre de file. Pero primero debes asegurarte de que el patrón llegue a Git.

En general, los patrones sin comillas no pueden llegar al command invocado. Como un caso especial, si el patrón no coincide con ningún file (en el directory actual si no hay una barra en el patrón), bash pasará el patrón no expandido al command (a less que se nullglob opción nullglob , en cuyo caso el argumento del patrón ser descartado de los arguments pasados ​​al command). Pero el comportamiento varía entre las conchas. De forma pnetworkingeterminada, zsh emite un error como "no se encontraron coincidencias" a less que la opción de nomatch no esté establecida (pasa el patrón no expandido como argumento) o se establece la opción null_glob (descarta el patrón de la list de arguments).

Por lo tanto, usar patrones sin comillas y esperar que lleguen al command subyacente solo es confiable si conoce el comportamiento de su caparazón y conoce el contenido de los directorys especificados en el patrón (generalmente solo el directory actual para patrones sin barra inclinada).

Por lo tanto, para get la máxima confiabilidad, si desea git add para get la cadena literal *.png como argumento, debe citarla.

 git add \*.png git add "*.png" git add '*'.png # etc. 

Una vez que haya pasado con éxito un patrón de nombre de file a Git, encontrará algunas diferencias con respecto a cómo las procesan las conchas.

La principal diferencia de preocupación en esta pregunta es que la coincidencia se realiza mediante fnmatch (3) sin establecer FNM_PATHNAME. Esto significa que un patrón como *.png coincidirá con un file foo.png en el directory actual (como un shell), pero también coincidirá con dir/bar.png (porque sin FNM_PATHNAME el * puede coincidir con la barra). Git llama a sus patrones "pathspecs" para diferenciarlos de los patrones "glob" de shell.

Desafortunadamente, hay una inconsistencia en la forma en que git add maneja pathspecs. Siempre los aplica a los files sin seguimiento, pero nunca los aplica a los files rastreados (en cambio, los arguments del tipo de nombre de file como pathspecs solo se comtestingn para encontrar coincidencias exactas con la list de files rastreados). Aparentemente, esto es exactamente lo que encontró el PO, ya que agregaría nuevos files que coinciden con la ruta de acceso, pero no actualizaría (ya) los files rastreados que coinciden con la ruta de acceso.

La solución temporal de Jefromi ( git add **/*.png ) funciona siempre que su shell soporte el ** patrón extendido (o un equivalente).

En realidad puedes hacer que Git haga el trabajo, pero usar el caparazón es probablemente más fácil (si tu caparazón lo admite).

 # update all tracked files matching the Git pathspec *.png git ls-files --cached -z \*.png | git update-index --add -z --stdin 

Aliviar el manejo interno de la ruta de acceso de Git es un objective a "mediano ploop", pero no uno con el que el time, el interés y la experiencia pertinente hayan avanzado para solucionarlo.

Se planteó como una idea de proyecto para Google Summer of Code 2010 (no recogido por nadie), y los problemas relacionados aparecen en la list de correo de vez en cuando (en enero y nuevamente en marzo de 2010 alguien informó un síntoma muy parecido al OP's , el mantenedor de Git explicó lo que le gustaría ver a largo ploop ).

En duda, intente:

 git -A -- *.png 

, que podría ser más completo ( página de git add )

 -A --all 

Como -u , pero combine <filepattern> contra files en el tree de trabajo además del índice.
Eso significa que encontrará nuevos files, así como la organización del contenido modificado y la eliminación de files que ya no están en el tree de trabajo.

Vea la pregunta " Diferencia de" git add -A "y" git add . " git add .

Los filesystems que no distinguen entre mayúsculas y minúsculas, como la configuration pnetworkingeterminada de Mac OS X, también causarán esgulps. Si cambias 'directory' a 'Directorio' no conseguirás que git lo reconozca a less que te muevas a otra carpeta temporal, confirmes, retrocedas y vuelvas a cometer.

git ls-files es una buena forma de listr todo en tu git repo

Para su caso, puede hacer algo como

 git ls-files --modified | grep '\.png$' | xargs git add 

Enumere los files modificados, filtre por extensión (.png en este caso) y git agregue las inputs resultantes