Sorprendido por tantas respuestas incorrectas. -u noEstá Mal. -unoes correcto. -u notrata de hacer un estado en un archivo llamado no! El nono es un argumento para . Para forzar a ser interpretado como un argumento para , no debe haber espacio. Para probar esto, haz y compara con . -uno-utouch Invalidgit status -uInvalidgit status -u Invalid
Aaron McDaid el
Respuestas:
251
Como ya se dijo, para excluir del estado solo use:
git status -uno # must be "-uno" , not "-u no"
Si, en cambio, desea ignorar permanentemente los archivos no rastreados actualmente, puede, desde la raíz de su proyecto, iniciar:
Cada llamada posterior a git statusignorará explícitamente esos archivos.
ACTUALIZACIÓN : el comando anterior tiene un inconveniente menor: si aún no tiene un .gitignorearchivo, ¡su gitignore se ignorará a sí mismo! Esto sucede porque el archivo .gitignorese crea antes de que git status --porcelainse ejecute. Entonces, si aún no tiene un .gitignorearchivo, le recomiendo usar:
Esto crea una subshell que se completa antes de.gitignore crear el archivo.
EXPLICACIÓN DE MANDO ya que recibo muchos votos (¡gracias!) Creo que es mejor que explique un poco el comando:
git status --porcelain se usa en lugar de git status --short porque el manual dice "Proporcione la salida en un formato fácil de analizar para los scripts. Esto es similar a la salida corta, pero se mantendrá estable en todas las versiones de git e independientemente de la configuración del usuario". Entonces tenemos tanto la capacidad de análisis como la estabilidad;
grep '^??' filtra solo las líneas que comienzan con ?? , que, de acuerdo con el manual de estado de git , corresponden a los archivos no rastreados;
cut -c4- elimina los primeros 3 caracteres de cada línea, lo que nos da solo la ruta relativa al archivo sin seguimiento;
el | símbolos son tuberías , que pasan la salida del comando anterior a la entrada del siguiente comando;
los símbolos >>y >son operadores de redireccionamiento , que agregan la salida del comando anterior a un archivo o sobrescribe / crea un nuevo archivo, respectivamente.
OTRA VARIANTE para aquellos que prefieren usar ensed lugar de grepy cut, aquí hay otra forma:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- elimina los primeros 4 caracteres de cada línea, lo que nos da solo la ruta relativa al archivo sin seguimiento; No. -cmarca el comienzo de una lista de números de columna para cortar. Y 4-selecciona la línea desde la columna 4 hasta el final, que corta las columnas 1-3. Por lo tanto, su comando de corte en realidad elimina los primeros 3 caracteres de cada línea. Si eliminó 4 caracteres de una línea de estado de git como la de este archivo aquí:, ?? app/views/static_pages/contact.html.erbeliminaría la primera letra de app. Entonces el comando es correcto, pero la explicación es defectuosa.
7stud
@ 7stud: gracias, tienes razón, escribí 4 por error. He arreglado la respuesta.
Diego
2
Realmente aprecio la explicación del comando. Es bueno saber qué están haciendo los comandos aleatorios que copié de Internet, y nos ayuda a todos a aprender a usar la línea de comandos y a mejorar.
Eric Fitting
1
-u nono funciona para mi Pero lo -unohace. He actualizado la respuesta en consecuencia. Este es un diseño extraño para git. Estoy en git 1.7.1
Aaron McDaid el
2
@AaronMcDaid: gracias. El cambio se documenta aquí y se discute aquí
Diego
51
Si desea ignorar permanentemente estos archivos, una forma sencilla de agregarlos .gitignorees:
¿Por qué esto no obtiene tantos votos? ¡No es necesario pasar por otros 2 programas!
JoelFan
44
@JoelFan: dos razones: 1) esta solo funciona desde la raíz del git , mientras que la aceptada funciona desde todos los subdirectorios, solo necesita ajustar la .gitignoreruta de destino 2) si tiene un directorio sin seguimiento, este enumera cada uno y cada archivo en él, pero no el directorio sin seguimiento en sí mismo (por lo que no ignorará el directorio y, por lo tanto, aún recibirá informes de futuros archivos en el directorio como no seguidos, mientras que el aceptado enumera solo el directorio y no los archivos sin seguimiento dentro Esto es una cuestión de lo que quieres hacer, pero a menudo solo quieres ignorar todo el directorio
Diego
1
Gracias, Poolie. Aprecio la diferencia de su sugerencia debido a los puntos mencionados por @Diego. Comencé a trabajar con una biblioteca de archivos y carpetas y no quiero rastrear / enviar los archivos originales. Solo quiero rastrear archivos que agrego o reconstruyo en la biblioteca. Agregar las carpetas principales ignoraría todo. Esta / su solución agregó todos los 1696 archivos en un instante. xD
Chaos7703
Esto también se puede lograr usando git config status.showUntrackedFiles no.
El parámetro mode se usa para especificar el manejo de archivos no rastreados. Es opcional: por defecto es todo, y si se especifica, debe estar pegado a la opción (por ejemplo, -uno, pero no -u no).
Bueno, si todos tuvieran RTFM antes de publicar, ninguno de nosotros obtendría ningún representante :-)
Jenny D
4
Dos caminos:
usa el argumento "-uno" para git-status. Aquí hay un ejemplo:
[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
O puede agregar los archivos y directivas a .gitignore, en cuyo caso nunca se mostrarán.
Una forma práctica de editar el .gitignoreser git status | cat >> temp && vim temp. Luego edite el archivo para que se eliminen las primeras líneas y la última línea, así como el final #y el espacio en blanco después. Entonces cat temp >> .gitignore && rm temp. En caso de que no .gitignoreestuviera presente antes, mv temp .gitignorelo hará. Cosas feas pero mejores que actualizarlas .gitignoremanualmente.
sjas
1
Esta respuesta es incorrecta. La respuesta correcta es -uno. Si lo usa -u no, es equivalente a no -u: hará un estado en un archivo llamado no(que probablemente no exista) y usará el -umodo predeterminado . es decir, es equivalente agit status no
Aaron McDaid
3
-u notampoco muestra archivos sin clasificar. -unofunciona como se desea y se muestra sin etapas, pero se oculta sin seguimiento.
Incluso esto no es del todo correcto. git status -u Xes equivalente a git status X -u( Xno es un argumento para -u). Esto, a su vez, es equivalente a git status X(porque -usin argumento es el valor predeterminado -u). Por lo tanto, es simplemente un estado git en el archivo X. Entonces, si Xes noasí, simplemente intenta hacer un estado git en un archivo llamado no, que probablemente no tenga
Aaron McDaid
2
En caso de que no esté en Unix como el sistema operativo, esto funcionaría en Windows con PowerShell
Si tiene muchos archivos no rastreados y no quiere " gitignore" todos ellos, tenga en cuenta que, desde git 1.8.3 (22 de abril de 2013) , git statusmencionará --untracked-files=noincluso si no agregó esa opción en el ¡primer lugar!
" git status" sugiere a los usuarios que busquen usar la --untracked=noopción cuando lleva demasiado tiempo.
Vine aquí tratando de resolver un problema ligeramente diferente. Tal vez esto sea útil para alguien más:
Creo una nueva sucursal feature-a. Como parte de esta rama, creo nuevos directorios y necesito modificar .gitignore para suprimir algunos de ellos. Esto sucede mucho al agregar nuevas herramientas a un proyecto que crea varias carpetas de caché. .serverless,.terraform etc.
Antes de que esté listo para fusionar eso con el master, aparece algo más, así que pago masternuevamente, pero ahoragit status recupero esas carpetas suprimidas, ya que .gitignore aún no se ha fusionado.
La respuesta aquí es realmente simple, aunque tuve que encontrar este blog para resolverlo:
Solo revisa el archivo .gitignore de la feature-asucursal
*
muy probable que un testamento no sea lo que quieres.-u no
Está Mal.-uno
es correcto.-u no
trata de hacer un estado en un archivo llamadono
! El nono
es un argumento para . Para forzar a ser interpretado como un argumento para , no debe haber espacio. Para probar esto, haz y compara con .-u
no
-u
touch Invalid
git status -uInvalid
git status -u Invalid
Respuestas:
Como ya se dijo, para excluir del estado solo use:
Si, en cambio, desea ignorar permanentemente los archivos no rastreados actualmente, puede, desde la raíz de su proyecto, iniciar:
Cada llamada posterior a
git status
ignorará explícitamente esos archivos.ACTUALIZACIÓN : el comando anterior tiene un inconveniente menor: si aún no tiene un
.gitignore
archivo, ¡su gitignore se ignorará a sí mismo! Esto sucede porque el archivo.gitignore
se crea antes de quegit status --porcelain
se ejecute. Entonces, si aún no tiene un.gitignore
archivo, le recomiendo usar:Esto crea una subshell que se completa antes de
.gitignore
crear el archivo.EXPLICACIÓN DE MANDO ya que recibo muchos votos (¡gracias!) Creo que es mejor que explique un poco el comando:
git status --porcelain
se usa en lugar degit status --short
porque el manual dice "Proporcione la salida en un formato fácil de analizar para los scripts. Esto es similar a la salida corta, pero se mantendrá estable en todas las versiones de git e independientemente de la configuración del usuario". Entonces tenemos tanto la capacidad de análisis como la estabilidad;grep '^??'
filtra solo las líneas que comienzan con??
, que, de acuerdo con el manual de estado de git , corresponden a los archivos no rastreados;cut -c4-
elimina los primeros 3 caracteres de cada línea, lo que nos da solo la ruta relativa al archivo sin seguimiento;|
símbolos son tuberías , que pasan la salida del comando anterior a la entrada del siguiente comando;>>
y>
son operadores de redireccionamiento , que agregan la salida del comando anterior a un archivo o sobrescribe / crea un nuevo archivo, respectivamente.OTRA VARIANTE para aquellos que prefieren usar en
sed
lugar degrep
ycut
, aquí hay otra forma:fuente
cut -c4-
elimina los primeros 4 caracteres de cada línea, lo que nos da solo la ruta relativa al archivo sin seguimiento; No.-c
marca el comienzo de una lista de números de columna para cortar. Y4-
selecciona la línea desde la columna 4 hasta el final, que corta las columnas 1-3. Por lo tanto, su comando de corte en realidad elimina los primeros 3 caracteres de cada línea. Si eliminó 4 caracteres de una línea de estado de git como la de este archivo aquí:,?? app/views/static_pages/contact.html.erb
eliminaría la primera letra deapp
. Entonces el comando es correcto, pero la explicación es defectuosa.-u no
no funciona para mi Pero lo-uno
hace. He actualizado la respuesta en consecuencia. Este es un diseño extraño para git. Estoy en git 1.7.1Si desea ignorar permanentemente estos archivos, una forma sencilla de agregarlos
.gitignore
es:git ls-files --others --exclude-standard >> .gitignore
Esto enumerará todos los archivos dentro de directorios no rastreados, que pueden o no ser lo que desea.
fuente
.gitignore
ruta de destino 2) si tiene un directorio sin seguimiento, este enumera cada uno y cada archivo en él, pero no el directorio sin seguimiento en sí mismo (por lo que no ignorará el directorio y, por lo tanto, aún recibirá informes de futuros archivos en el directorio como no seguidos, mientras que el aceptado enumera solo el directorio y no los archivos sin seguimiento dentro Esto es una cuestión de lo que quieres hacer, pero a menudo solo quieres ignorar todo el directoriogit config status.showUntrackedFiles no
.Lo encontré en el manual.
git status -uno
fuente
Dos caminos:
usa el argumento "-uno" para git-status. Aquí hay un ejemplo:
O puede agregar los archivos y directivas a .gitignore, en cuyo caso nunca se mostrarán.
fuente
.gitignore
sergit status | cat >> temp && vim temp
. Luego edite el archivo para que se eliminen las primeras líneas y la última línea, así como el final#
y el espacio en blanco después. Entoncescat temp >> .gitignore && rm temp
. En caso de que no.gitignore
estuviera presente antes,mv temp .gitignore
lo hará. Cosas feas pero mejores que actualizarlas.gitignore
manualmente.-uno
. Si lo usa-u no
, es equivalente ano -u
: hará un estado en un archivo llamadono
(que probablemente no exista) y usará el-u
modo predeterminado . es decir, es equivalente agit status no
-u no
tampoco muestra archivos sin clasificar.-uno
funciona como se desea y se muestra sin etapas, pero se oculta sin seguimiento.fuente
git status -u X
es equivalente agit status X -u
(X
no es un argumento para-u
). Esto, a su vez, es equivalente agit status X
(porque-u
sin argumento es el valor predeterminado-u
). Por lo tanto, es simplemente un estado git en el archivoX
. Entonces, siX
esno
así, simplemente intenta hacer un estado git en un archivo llamadono
, que probablemente no tengaEn caso de que no esté en Unix como el sistema operativo, esto funcionaría en Windows con PowerShell
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
Sin embargo, el
.gitignore
archivo debe tener una nueva línea vacía, de lo contrario, agregará texto a la última línea sin importar si tiene contenido.Esta podría ser una mejor alternativa:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
fuente
Si tiene muchos archivos no rastreados y no quiere "
gitignore
" todos ellos, tenga en cuenta que, desde git 1.8.3 (22 de abril de 2013) ,git status
mencionará--untracked-files=no
incluso si no agregó esa opción en el ¡primer lugar!fuente
Vine aquí tratando de resolver un problema ligeramente diferente. Tal vez esto sea útil para alguien más:
Creo una nueva sucursal
feature-a
. Como parte de esta rama, creo nuevos directorios y necesito modificar .gitignore para suprimir algunos de ellos. Esto sucede mucho al agregar nuevas herramientas a un proyecto que crea varias carpetas de caché..serverless
,.terraform
etc.Antes de que esté listo para fusionar eso con el master, aparece algo más, así que pago
master
nuevamente, pero ahoragit status
recupero esas carpetas suprimidas, ya que .gitignore aún no se ha fusionado.La respuesta aquí es realmente simple, aunque tuve que encontrar este blog para resolverlo:
Solo revisa el archivo .gitignore de la
feature-a
sucursalfuente