¿Hay alguna manera de saber si se está rastreando un archivo ejecutando algunos git
comando y verificando su código de salida?
En otras palabras: ¿git está rastreando un archivo?
¿Hay alguna manera de saber si se está rastreando un archivo ejecutando algunos git
comando y verificando su código de salida?
En otras palabras: ¿git está rastreando un archivo?
Respuestas:
tratar:
git ls-files --error-unmatch <file name>
saldrá con 1 si el archivo no se rastrea
--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
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
}
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 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.sh
se rastrea y modifica y newbla
no 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")
git status --porcelain
es su amigo si necesita analizar la salida por script, eche un vistazo al documento vinculado que muestra otras opciones útiles
git 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 rastrea
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
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,
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.
Sugiero un alias personalizado en ti .gitconfig
.
Tienes que hacerlo:
1) Con el comando git:
git config --global alias.check-file <command>
2) Edición ~/.gitconfig
y agregue esta línea en la sección de alias:
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
Una vez ejecutado el comando (1) o el archivo guardado (2), en su espacio de trabajo puede probarlo:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
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,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Si el archivo no tiene seguimiento de git,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Solo mis dos centavos:
git ls-files | grep -x relative/path
donde relative/path
se puede determinar fácilmente presionando tab
dentro de un shell de autocompletado. Agregue un adicional | wc -l
para obtener una salida de 1 o 0.
grep
opción --fixed-strings
.