¿Hay alguna forma de usar un comando como git ls-files
para mostrar solo archivos sin seguimiento?
La razón por la que pregunto es porque uso el siguiente comando para procesar todos los archivos eliminados:
git ls-files -d | xargs git rm
Me gustaría algo similar para los archivos sin seguimiento:
git some-command --some-options | xargs git add
Pude encontrar la -o
opción git ls-files
, pero esto no es lo que quiero porque también muestra archivos ignorados. También pude crear el siguiente comando largo y feo:
git status --porcelain | grep '^??' | cut -c4- | xargs git add
Parece que debe haber un mejor comando que pueda usar aquí. Y si no lo hay, ¿cómo creo comandos personalizados de git?
git
git-status
git-rm
git-stage
git-ls-files
Todos somos monica
fuente
fuente
git ls-files -d | xargs git rm
?git
solo funciona en archivos, no tiene ninguna forma de rastrear carpetas vacías. Intenta en sufind . -type d -empty
lugar.Respuestas:
Para listar archivos sin seguimiento, intente:
Si necesita canalizar la salida
xargs
, es aconsejable tener en cuenta los espacios en blanco usandogit ls-files -z
yxargs -0
:Buen alias para agregar archivos sin seguimiento:
Editar: Para referencia: git-ls-files
fuente
!
significa al comienzo de la línea de alias, o dónde está documentado?git add *
hará lo mismo: agregar todos los archivos no rastreados, excepto el estándar (archivos cuyas rutas están cubiertas.gitignore
).[alias] lso = "!f() { cd $(git rev-parse --show-toplevel); git ls-files -o; }; f"
Si solo desea eliminar archivos no rastreados, haga esto:
agregue
x
a eso si desea incluir también archivos ignorados específicamente. Yo usogit clean -dfx
un montón durante todo el día.Puede crear git personalizado simplemente escribiendo un script llamado
git-whatever
y tenerlo en su camino.fuente
git add -A
ogit add -u
(dependiendo de lo que tenga más sentido para ti)git add -A -n
Hará lo que quieras.-A
agrega todos los archivos no rastreados al repositorio, lo-n
convierte en un lugardry-run
donde no se realiza la adición, pero la salida de estado se muestra con una lista de cada archivo que se habría agregado.fuente
.gitignore
archivos, que generalmente es lo que queremos, pero si nogit add -fAn
,.add '$file'
. Mientras quegit ls-files --exclude-standard -o
da una salida desnuda, muy caliente.La respuesta aceptada se bloquea en los nombres de archivo con espacio. En este momento no estoy seguro de cómo actualizar el comando alias, así que pondré la versión mejorada aquí:
fuente
Todo es muy simple
Para obtener una lista de todos los archivos no rastreados, use el estado del comando git con la opción -u (--untracked-files)
fuente
--ignored
algit status -u
comandoAl buscar archivos para agregar potencialmente. La salida de
git show
hace eso, pero también incluye muchas otras cosas. El siguiente comando es útil para obtener la misma lista de archivos pero sin todas las demás cosas.Esto es útil cuando se combina en una tubería para encontrar archivos que coincidan con un patrón específico y luego canalizar eso
git add
.fuente
Sé que es una pregunta antigua, pero en términos de enumerar archivos sin seguimiento, pensé que agregaría otro que también enumera las carpetas sin seguimiento:
Puede usar la operación git clean con -n (ejecución en seco) para mostrarle qué archivos eliminará (incluidos los archivos .gitignore):
git clean -xdn
Esto tiene la ventaja de mostrar todos los archivos y todas las carpetas que no se rastrean. Parámetros:
x
- Muestra todos los archivos no rastreados (incluidos los ignorados por git y otros, como la salida de compilación, etc.)d
- mostrar directorios no rastreadosn
¡Y lo más importante! - dryrun, es decir, en realidad no elimine nada, solo use el mecanismo de limpieza para mostrar los resultados.Puede ser un poco inseguro hacerlo así en caso de que olvides el
-n
. Por lo general, lo alias en git config.fuente
Todas las respuestas anteriores que verifiqué también enumerarían los archivos a confirmar. Aquí hay una solución simple y fácil que solo enumera los archivos que aún no están en el repositorio y que no están sujetos
.gitignore
.o
fuente
Creo que esto será lo mismo que pretendía el póster original:
git add .
fuente
git/svn add .
, el gatito muere.git add .
con impunidad!.gitignore
correctamente. Sin embargo, sigue siendo bueno evitarlogit add .
. Es mejorgit add -u
.