2012-01-25 29 views
20

Cuando hago un git status me sale una lista de archivos con el prefijo new file:. ¿Cómo puedo obtener solo esta lista? Quiero procesar estos archivos en un bucle simple en un pequeño script de shell.git: Lista de los nuevos archivos sólo

+0

Ha intentado 'grep'? 'estado de git | grep nuevo archivo'. – Zeta

+0

Sí, pero eso no me da los nombres de archivo sin formato. – BetaRide

+2

Prefiero usar 'git ls-files demás --exclude-standard' (http://stackoverflow.com/a/2299448/6309) – VonC

Respuesta

15

me gustaría utilizar algo así como git status --porcelain | grep "^A" | cut -c 4-

+0

Son años más tarde, pero esto ya no funciona para mí (la salida de 'git status' probablemente ha cambiado). ** EDITAR: ** Bah. No lo había agregado/comprometido. Soporta la prueba del tiempo! – Hendy

12

Puede usar git status --short para obtener la lista de archivos.

+5

Esto no debe pasarse por alto. – jarederaj

54

No utilice grep para analizar la salida de git. Es casi seguro que Git tiene las cosas que estás buscando integradas (excepto si vas a buscar cosas realmente avanzadas).
Puede usar git diff para mostrar los cambios. --name-only muestra solo los nombres de archivo. --diff-filter=A enumera solo los archivos agregados.
Si quieres ver los nuevos archivos que ya se haya añadido a la utilización índice --cached, de lo contrario omitirlo. Para ver ambos diff a HEAD.
Los comandos se ven así:

git diff --name-only --diff-filter=A --cached # All new files in the index 
git diff --name-only --diff-filter=A   # All files that are not staged 
git diff --name-only --diff-filter=A HEAD  # All new files not yet committed 
+2

diff-filtro es realmente el camino a seguir :) –

+1

Es muy desafortunado que el PO no acepta esta respuesta, al igual que en mi humilde opinión, tienes toda la razón. :) –

8

En lugar de analizar la salida de "git status", es probable que sea más elegante de utilizar

git ls-files -o --exclude-standard 

Al igual que con git status, ls-files producirá salida en relación con su directorio actual de trabajo.

Es posible que desee incluir la opción --full-name:

git ls-files -o --exclude-standard --full-name 
+0

OP pidió enumerar nuevos archivos y esta respuesta no requiere ningún otro programa para canalizar la salida. Encontré en mac git diff no funcionó con los filtros como se esperaba mientras esto :) :) –

+0

Este es claramente el ganador. Funciona en nuevos directorios que contienen todos los archivos nuevos. – Ali

+0

Sin embargo, tenga en cuenta que esto no funciona desde subdirectorios. Terminé usando 'diff' git para hacer mi trabajo de la escritura de cada directorio en el repositorio: ' $ git diff --name sólo --diff-filter = A HEAD' –

0

Lista de archivos nuevos o para obtener los archivos que se añade a git, se puede conseguir usando git status y el comando grep como git status -s | grep ??

[email protected]:~/project-repo-directory# git status -s | grep ?? 
?? src/.../file1.js 
?? src/.../file2.js 
?? src/.../file3.js 
.... 
0
git status | grep "new file:" | cut -c 14- 

git status | grep "modified:" | cut -c 14- 
Cuestiones relacionadas