mahdi yusuf
¿Cómo puedo ejecutar “git status” y simplemente obtener los nombres de archivo en lugar de la ruta relativa larga?
marca longair
la salida de git status --porcelain
diseñado para ser fácil de analizar en una secuencia de comandos, genera las rutas completas en lugar de las rutas relativas, independientemente de dónde se encuentre su directorio actual dentro del árbol.
Cada salida de línea por git status --porcelain
tiene dos caracteres principales que indican el estado del archivo (por ejemplo, si no se ha rastreado, modificado, nuevo, eliminado, etc.) seguidos de un espacio, por lo que si solo desea las rutas completas de todo lo que se mencionaría en la salida de git status
tu puedes hacer:
git status --porcelain | sed s/^...//
-
Igual que git status -s pero sin colorear.
– earlonrails
6 de febrero de 2013 a las 18:51
-
Descubrí que estaba buscando una pregunta ligeramente diferente, pero esto aún incluye el marcador de estado (que no creo que haya una opción para eliminar). La respuesta de @sehe es mejor si solo desea el nombre del archivo y nada más.
–Isaac Agrey
07/08/2013 a las 22:05
-
@IsaacAggrey: excepto que con la respuesta de sehe debe ejecutar varios comandos, e incluso esos comandos perderán archivos sin seguimiento que aparecerían en la salida del estado de git, por lo que no es una respuesta precisa a la pregunta. Es fácil eliminar los caracteres de estado desde el comienzo de la salida producida por lo que sugerí: edité mi respuesta para mostrar cómo.
–Mark Longair
23 de agosto de 2013 a las 8:59
-
@earlonrails solo es lo mismo si está en la raíz, ejecute los mismos comandos desde un subdirectorio del repositorio y verá que uno usa rutas relativas al directorio de trabajo, el otro rutas completas en la raíz del repositorio
– jxramos
28 de marzo de 2018 a las 23:55
-
@jxramos Todavía puede usar cortar simplemente cambie la bandera para el comando de estado de git,
git status --porcelain | cut -c4-
. OMIcut
es mejor que usarsed
porque más sistemas tendráncut
ya instalado.– earlonrails
02/04/2018 a las 18:41
earlonrails
Creo cut
es bueno para esto
git status -s | cut -c4-
-
y aquí estaba usando sed para eliminar los códigos de estado. nunca usé el indicador -c para cortar antes. ¡lindo! agregue esto a su .gitconfig para un buen comienzo del día:
de=!$EDITOR $( git status --porcelain | cut -c4- ) & # open all changed files in EDITOR
– Juan Hart
2 de agosto de 2013 a las 22:09
-
Para alguien que no está familiarizado con
cut
dominio,cut -c 4-
significa, tomar caracteres del cuarto carácter.– Sanghyun Lee
20 de febrero de 2014 a las 7:15
-
Sí, más limpio que sed en este caso.
– Camioneta Simon
12 de abril de 2019 a las 7:48
seje
ajá, yo pensar Yo solo entendido la pregunta: quieres nombres base? Hilvanar | while read a; do basename "$a"; done
a cualquiera de los siguientes:
qué tal si
-
git diff --name-only
para cambios relativos al índice
-
git diff --name-only --staged
para… cambios bien organizados 🙂
-
git diff --name-only HEAD
tengo ambos
-
Ya veo, si solo quieres nombres base agregue esto al final de cualquier: ` | mientras lee fname; hacer basename “$fname”; hecho`
– seje
16 de marzo de 2011 a las 14:27
-
No produce nombres de ruta relativos al directorio actual como git status | Cortar la respuesta
– AnthumChris
14/03/2019 a las 21:13
-
Aunque ciertamente solo produce resultados en relación con la raíz del repositorio de git, esta es una solución mucho más precisa que
git status --porcelain
ya que no necesita procesar/limpiar su salida.– Miguel Ruíz
3 de noviembre de 2021 a las 17:34
-
Funciona muy bien:
vi `git dno`
Creo que el acceso directo de dno para git diff vino en mi gitconfig de forma predeterminada.– k00ka
9 de febrero de 2022 a las 17:43
Una solución mucho más simple que está integrada para git
usando ls-files
.
De los documentos:
OPCIONES
-c –cached Mostrar archivos almacenados en caché en la salida (predeterminado)
-d –deleted Mostrar archivos eliminados en la salida
-m –modified Mostrar archivos modificados en la salida
-o –others Muestra otros archivos (es decir, sin seguimiento) en la salida
-i –ignored Muestra solo los archivos ignorados en la salida. Cuando muestre archivos en el índice, imprima solo aquellos que coincidan con un patrón de exclusión. Cuando muestre “otros” archivos, muestre solo aquellos que coincidan con un patrón de exclusión. Las reglas de ignorar estándar no se activan automáticamente, por lo tanto, se requiere al menos una de las opciones –exclude*.
-s –stage Muestra los bits de modo del contenido por etapas, el nombre del objeto y el número de etapa en la salida.
-u –unmerged Mostrar archivos no fusionados en la salida (fuerza –stage)
El ejemplo que muestra las banderas también se puede combinar:
git ls-files -dmo
Dan McClain
git status
siempre caminará hacia abajo (editar y hacia arriba) el árbol y mostrar las rutas relativas. Si solo desea el archivo en el directorio en el que se encuentra, consulte esta respuesta relacionada
You-Liang Shih
Obtener el nombre de los archivos modificados
git status --porcelain|awk '{if($1=="M") {print "basename " $2}}'|sh
Uso un script similar para copiar mis archivos modificados a un servidor remoto, como se muestra a continuación:
git status --porcelain|awk '{if($1=="M") {print "scp " $2 " account_name@server_ip:~/my_codebase/$(dirname " $2 ")/;"} }'|sh
Stassa Patsantzis
git status genera rutas relativas, por lo que si realiza un cd en el mismo directorio que el archivo (bajo la raíz de su directorio de trabajo) antes de ejecutar git status, solo generará los nombres base de los archivos agregados/preparados.
cd /long/path/to/my/repo/root/dir
"stuff" > ./newfile.txt
> git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: /long/path/to/my/repo/root/dir/plus/some/more/levels/of/directory/structure/inside/it/changed_file.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# long/path/to/my/repo/root/dir/plus/some/even/more/levels/of/directory/structure/inside/it/but_another_new_file.txt
# newfile.txt
no changes added to commit (use "git add" and/or "git commit -a")
es decir, ‘newfile.txt’ aparece sin la ruta completa porque se encuentra en la misma ruta.