2010-02-08 21 views
56

Tengo varios archivos .screen dentro de /xxx/documentation y sus subdirectorios que ya están rastreados por Git.git: ¿Cómo puedo agregar recursivamente todos los archivos en un subárbol de directorio que coinciden con un patrón global?

Después de modificar muchos de estos archivos de pantalla, corro git add documentation/\\*.screen -como como en el primer ejemplo en git-add 's documentación para organizar estos archivos, pero el comando falla:

fatal: pathspec 'documentation/\*.screen' did not match any files

son órdenes mal, o tiene git un error?

Respuesta

59

Es un error en la documentación. Cita el asterisco con

$ git add documentation/\*.screen

o

$ git add 'documentation/*.screen'

para obtener el comportamiento que desea.

Si por el contrario desea agregar archivos de sólo el directorio actual, utilice

$ git add *.screen

ACTUALIZACIÓN: presenté una patch que corrige el problema, now fixed partir de la versión 1.6.6.2.

+0

¿Estos dos comandos conducen al mismo resultado? ¿Qué pasa con solo agregar archivos en el directorio actual pero no en sus subdirectorios? –

+0

Por cierto, kubi mencionó que el comando funcionó bien en su máquina, ¿qué dices? –

+0

@Phuong Sí, los dos comandos conducen al mismo resultado. Para agregar archivos en el directorio actual solamente, no cite el argumento, (por ejemplo, git add * .screen). Creo que Kubi y Aaron malinterpretaron tu pregunta porque me sorprendió saber (¡gracias por haberme inducido!) Que git-add tiene esta característica. –

1

tratar

git add ./documentation/*.screen 
+0

¿No es el comando sólo Agregar archivo en ./documentation, no de sus subdirectorios? –

+0

Tienes razón. Simplemente probé tu comando original en mi máquina y funcionó bien, sin embargo. – kubi

4

usted le dijo al shell para buscar *.screen (es decir, exactamente esta cadena - que no existe - en lugar de lo que quiere "todos los archivos que terminan con .screen). Omitir el \\ por lo la cáscara puede hacer la expansión de nombre de archivo para usted.

+0

En este manual, me dijeron que añadiera las barras diagonales inversas dobles http://www.kernel.org/pub/software/scm/git/docs/git-add.html. ¿Qué dices? –

+0

He leído el ejemplo y entiendo lo que quieren hacer (recursivo agregar) pero entonces, ¿por qué falla el comando? El error sugiere que no hay ningún archivo con la extensión ".screen" en el directorio o que el patrón no se expande. –

+0

Bueno, eso es extraño, porque cuando elimino las barras diagonales dobles, el comando no genera ningún error. –

17

He intentado la respuesta aceptada, pero no funcionó para mí .. así que aquí está la mía por si acaso alguien quiere recibir su trabajo sin tener que gastar tiempo en la disección de los diversos aspectos que podrían causar el problema:

find documentation -name "*.screen" | xargs git add -u 

// la opción -u para git-add añade al índice sólo los archivos que previamente fueron rastreados y modificar

+0

En su caso, ¿la 'documentación' es el nombre de un directorio dentro del árbol de trabajo del repositorio o una ruta relativa desde fuera del árbol de trabajo al nivel superior del repositorio? –

4

Esto lo acabo de utilizar para un problema similar de git añadir todos los archivos en un directorio:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Para la pregunta original del comando sería:

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Tenga en cuenta que estoy tratando con el caso en que un nombre de archivo completo especificado contiene espacios. Por eso mi respuesta. Edite la parte anterior al primer | para seleccionar diferentes archivos para agregar.

1

git add * .java trabaja para que añada de forma recursiva todos los archivos de Java

+1

¡Guau, también me funciona! Pero solo si no hay archivos '.java' en el directorio actual. Si los hay, solo se agregarán esos archivos. –

Cuestiones relacionadas