Agregue files modificados de la list específica con git add

Quiero agregar solo files modificados. Lo intenté:

git status | grep "modified" | cut -d " " -f4 | git add 

o

 git status | grep "modified" | cut -d " " -f4 | xargs git add 

pero no funciona. ¿Qué debería usar?

El primero no funcionará porque no usas xargs . El segundo no funciona porque el cut no funciona: mira la salida.

Hay el command git ls-files --modified que le da una list de files modificados, uno por línea. Si no tiene espacios en los nombres de sus files, simplemente use:

 git ls-files --modified | xargs git add 

Si tiene espacios en los nombres de sus files, use las opciones -z y -0 (asegurándose de que su variante de xargs compatible con -0 como una opción; no es universal, pero es estándar con los xargs GNU):

 git ls-files --modified -z | xargs -0 git add 

Al usar el git status sin marcas, debe tener la security de que no hay espacios en los nombres de sus files y, a continuación, puede usar:

 git status | awk '/[[:space:]]modified:[[:space:]]/{print $2}' | xargs git add 

Además, git status -s brinda un formatting de salida mejor y más fácil de analizar. Puede usar:

 git status -s | sed -n '/^ M / s///p' | xargs git add 

Esto funciona para el caso simple (ha modificado el file localmente, todavía no está en el índice, y ese es el único cambio relevante). Debe leer el spiel del git status --help en el formatting corto para determinar cómo debe manejar el (muchos) otros casos.

También tenga en count que git commit -a confirmará todos los files modificados.


Intento: git ls-files -o | grep "tests/" | xargs -0 git add git ls-files -o | grep "tests/" | xargs -0 git add git ls-files -o | grep "tests/" | xargs -0 git add , pero obtengo xargs: argument line too long .

La opción -0 para xargs requiere 'líneas' que terminan con bytes nulos. Tu command git no los genera porque omitiste la opción -z . Es probable que lo haya omitido porque está preocupado por el grep en el medio (que solo funcionará con líneas que terminan en líneas nuevas) pero su línea de command debe ser coherente por sí misma de extremo a extremo, ya sea trabajando con líneas nuevas o con valores nulos como delimitadores de nombre de file Afortunadamente, grep tiene una opción --null (funciona en GNU y BSD grep ; GNU también permite -z , pero eso significa algo diferente en BSD) para trabajar con esos datos. Por lo tanto, deberías intentar:

 git ls-files -o -z | grep --null "tests/" | xargs -0 git add 

o, si no tiene que preocuparse por los espacios en los nombres de file:

 git ls-files -o | grep "tests/" | xargs git add 

Simplemente puede usar git add -u . Solo presentará los files modificados .