¿Cómo saber si un file está git rastreado (por el código de salida del shell)?

¿Hay alguna manera de saber si un file está siendo rastreado ejecutando algún command git y verificando su código de salida?

En otras palabras: ¿está git rastreando un file?

tratar:

 git ls-files --error-unmatch <file name> 

saldrá con 1 si el file no es rastreado

Si no quiere saturar su console con posts de error, también puede ejecutar

 git ls-files file_name 

y luego verifica el resultado. Si git no devuelve nada, entonces el file no se rastrea. Si se realiza un seguimiento, git devolverá la ruta del file.

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 } 

EDITAR

Si necesitas usar git desde bash hay --porcelain opción para git status :

–porcelana

Proporcione el resultado en un formatting estable y fácil de analizar para las secuencias de commands. Actualmente, esto es idéntico a la salida –short, 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 file a la vez:

 > git status --porcelain bla ?? bla 

ORIGINAL

hacer:

 git status 

Verá un informe que indica qué files se actualizaron y cuáles no se rastrearon.

Puedes 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") 

Intenta ejecutar el git status en el file. 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 sé de ningún command de git que dé un código de salida "malo", pero parece que una forma fácil de hacerlo sería usar un command git que no da salida a un file que no se rastrea, como git-log o git-ls-files. De esta forma, en realidad no tiene que hacer ningún análisis sintáctico, 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 file, pero un código de salida de uno si no se realiza un seguimiento del file.

Sugiero un alias personalizado en ti .gitconfig .

Tienes que hacer mucho:

1) Con el command git:

 git config --global alias.check-file <command> 

2) Editar ~/.gitconfig y agregar 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 que haya lanzado el command (1) o el file 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 

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. Añadir un adicional | wc -l | wc -l para get una salida de 1 o 0.

usando git log dará información sobre esto. Si el file se rastrea en git, el command muestra algunos resultados (loggings). De lo contrario, está vacío.

Por ejemplo, si el file se sigue 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 file no tiene seguimiento git,

 root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js root@user-ubuntu:~/project-repo-directory#