Creo que el punto es cuál es el criterio para decidir un archivo como rastreado o no. Debe haber algún tipo de colección de archivos rastreados para buscar.
Al menos con mi versión anterior (1.6.0) de git, debe poner la --error-unmatchopción antes del nombre del archivo para obtener un error. De alguna manera, la opción solo se aplica a los nombres de archivo que la siguen.
Alex Dupuy
En realidad, el problema parece ser que la permutación de la opción getopt de GNU no está habilitada, y cuando aparece después de un nombre de archivo (o después --), --error-unmatchse trata como otro nombre de archivo (no en el índice) y no tiene ningún efecto.
[Una manera ingenua] Haga un pequeño cambio en el archivo (agregue / elimine un espacio). Y vea si el archivo aparece en la lista cuando se escribe 'git status'. Una manera tonta, pero puede ahorrar tiempo.
BraveNinja
Pero lo agregué y lo comprometí con el comando "git add -A && git commit -m" blah ". Incluso veo archivos completos con el comando" git ls-tree --name-only -r sha1 ".
Dr.jacky
66
Si no desea abarrotar su consola con mensajes de error, también puede ejecutar
git ls-files file_name
y luego verifica el resultado. Si git no devuelve nada, entonces el archivo no se rastrea. Si se rastrea, git devolverá la ruta del archivo.
Esto es útil si desea combinarlo en un script, por ejemplo PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
Creo que file_namedebe ser una coincidencia exacta (ruta completa + nombre de archivo), pero se puede usar con comodines:git ls-files *foo.rb
dechimp
16
EDITAR
Si necesita usar git desde bash, hay una --porcelainopción para git status:
--porcelana
Proporcione la salida en un formato estable y fácil de analizar para los scripts. Actualmente, esto es idéntico a la salida --short, pero se garantiza que no cambiará en el futuro, por lo que es seguro para los scripts.
La salida se ve así:
> git status --porcelain
M starthudson.sh
?? bla
O si solo hace un archivo a la vez:
> git status --porcelain bla
?? bla
ORIGINAL
hacer:
git status
Verá un informe que indica qué archivos se actualizaron y cuáles no.
Puede ver que bla.shse rastrea y modifica y newblano se rastrea:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
Guau. Debo haber estado ejecutándolo en un directorio y actuó como si estuviera revisando todo el repositorio. Gracias.
Dale Forester
44
En realidad, si ejecuto git status trackedfileme sale el código de salida 1 (se espera que 0 sea útil) pero no me da "error:" en la salida. Prefiero analizar un código de salida que una salida de cadena.
Dale Forester
43
Me parece que no se genera ningún error si ejecuto el estado de git en un archivo que existe en mi copia de trabajo de git pero que está excluido por .gitignore. (Es decir, esta respuesta no servirá).
JellicleCat
Tenga en cuenta que no funciona bien si el archivo está en la lista de ignorados, es decir, en el archivo.gitignore
Robin Hsu
8
Eso no funciona Siempre imprime lo mismo, incluso si el archivo no existe. $ git status notthere:On branch master nothing to commit, working directory clean
Chloe
6
No conozco ningún comando git que proporcione un código de salida "malo", pero parece que una forma fácil de hacerlo sería utilizar un comando git que no proporcione resultados para un archivo que no se rastrea, como archivos git-log o git-ls-files. De esa manera, no tiene que analizar realmente nada, puede ejecutarlo a través de otra utilidad simple como grep para ver si hubo algún resultado.
Por ejemplo,
git-ls-files test_file.c | grep.
saldrá con un código cero si se rastrea el archivo, pero un código de salida de uno si no se rastrea el archivo.
utilizando git logle dará información sobre esto. Si el archivo se rastrea en git, el comando muestra algunos resultados (registros). De lo contrario, está vacío.
Por ejemplo, si el archivo tiene un seguimiento de git,
donde relative/pathse puede determinar fácilmente presionando tabdentro de un shell de autocompletado. Agregue un adicional | wc -l para obtener una salida de 1 o 0.
Respuestas:
tratar:
saldrá con 1 si el archivo no se rastrea
fuente
--error-unmatch
opción antes del nombre del archivo para obtener un error. De alguna manera, la opción solo se aplica a los nombres de archivo que la siguen.--
),--error-unmatch
se trata como otro nombre de archivo (no en el índice) y no tiene ningún efecto.git ls-files | grep <PATTERN>
? ejemplo:git ls-files | grep Main.h
Si no desea abarrotar su consola con mensajes de error, también puede ejecutar
y luego verifica el resultado. Si git no devuelve nada, entonces el archivo no se rastrea. Si se rastrea, git devolverá la ruta del archivo.
Esto es útil si desea combinarlo en un script, por ejemplo PowerShell:
fuente
file_name
debe ser una coincidencia exacta (ruta completa + nombre de archivo), pero se puede usar con comodines:git ls-files *foo.rb
EDITAR
Si necesita usar git desde bash, hay una
--porcelain
opción paragit status
:La salida se ve así:
O si solo hace un archivo a la vez:
ORIGINAL
hacer:
Verá un informe que indica qué archivos se actualizaron y cuáles no.
Puede ver que
bla.sh
se rastrea y modifica ynewbla
no se rastrea:fuente
git status --porcelain
es su amigo si necesita analizar la salida por script, eche un vistazo al documento vinculado que muestra otras opciones útilesgit status --porcelain error: unknown option
la versión de porcelana es 1.6.0 :-)Intenta ejecutar
git status
el archivo. Imprimirá un error si git no lo rastreafuente
git status trackedfile
me sale el código de salida 1 (se espera que 0 sea útil) pero no me da "error:" en la salida. Prefiero analizar un código de salida que una salida de cadena..gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
No conozco ningún comando git que proporcione un código de salida "malo", pero parece que una forma fácil de hacerlo sería utilizar un comando git que no proporcione resultados para un archivo que no se rastrea, como archivos git-log o git-ls-files. De esa manera, no tiene que analizar realmente nada, puede ejecutarlo a través de otra utilidad simple como grep para ver si hubo algún resultado.
Por ejemplo,
saldrá con un código cero si se rastrea el archivo, pero un código de salida de uno si no se rastrea el archivo.
fuente
Sugiero un alias personalizado en ti
.gitconfig
.Tienes que hacerlo:
1) Con el comando git:
2) Edición
~/.gitconfig
y agregue esta línea en la sección de alias:Una vez ejecutado el comando (1) o el archivo guardado (2), en su espacio de trabajo puede probarlo:
fuente
utilizando
git log
le dará información sobre esto. Si el archivo se rastrea en git, el comando muestra algunos resultados (registros). De lo contrario, está vacío.Por ejemplo, si el archivo tiene un seguimiento de git,
Si el archivo no tiene seguimiento de git,
fuente
Solo mis dos centavos:
git ls-files | grep -x relative/path
donde
relative/path
se puede determinar fácilmente presionandotab
dentro de un shell de autocompletado. Agregue un adicional| wc -l
para obtener una salida de 1 o 0.fuente
grep
opción--fixed-strings
.