repositorio - ¿Cómo saber si un archivo es git seguido(por código de salida de shell)?
git push example (8)
¿Hay alguna forma de saber si un archivo está siendo rastreado ejecutando algún comando git
y verificando su código de salida?
En otras palabras: es git rastreando un archivo?
Intenta ejecutar el git status
en el archivo. Se imprimirá un error si no es rastreado por git
PS$> git status foo.txt
error: pathspec ''foo.txt'' did not match any file(s) known to git.
No conozco ningún comando git que dé un código de salida "malo", pero parece que una forma fácil de hacerlo sería usar un comando git que no da salida para un archivo que no se rastrea, como git-log o git-ls-archivos. De esa manera, realmente no tiene que hacer ningún análisis, 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 realiza un seguimiento del archivo, pero con un código de salida de uno si no se realiza el seguimiento del archivo.
Sólo mis dos centavos:
git ls-files | grep -x relative/path
donde relative/path
se puede determinar fácilmente presionando la tab
dentro de un shell de autocompletado. Añadir un adicional | wc -l
| wc -l
para obtener una salida de 1 o 0.
Si no desea saturar su consola con mensajes de error, también puede ejecutar
git ls-files file_name
y luego comprobar el resultado. Si git no devuelve nada, entonces el archivo no es rastreado. Si es rastreado, 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
}
Sugiero un alias personalizado en usted .gitconfig
.
Tienes que hacer la manera de hacerlo:
1) Con el comando git:
git config --global alias.check-file <command>
2) Editando ~/.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
tratar:
git ls-files --error-unmatch <file name>
saldrá con 1 si el archivo no es rastreado
usar git log
dará información sobre esto. Si el archivo es rastreado en git, el comando muestra algunos resultados (registros). Si no está vacío.
Por ejemplo, si el archivo es git seguido,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <[email protected]>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Si el archivo no es git seguido,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
EDITAR
Si necesita usar git de bash, existe la opción --porcelain
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 --short output, pero se garantiza que no cambiará en el futuro, lo que lo hace seguro para los scripts.
La salida se ve así:
> git status --porcelain
M starthudson.sh
?? bla
O si solo haces 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 están rastreados.
Puede ver que bla.sh
es rastreado y modificado y newbla
no es rastreado:
# 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")