Existe uma maneira de saber se um arquivo está sendo rastreado executando algum gitcomando e verificando seu código de saída?
Em outras palavras: o git está rastreando um arquivo?
Existe uma maneira de saber se um arquivo está sendo rastreado executando algum gitcomando e verificando seu código de saída?
Em outras palavras: o git está rastreando um arquivo?
Respostas:
tentar:
git ls-files --error-unmatch <file name>
sairá com 1 se o arquivo não for rastreado
--error-unmatchopção antes do nome do arquivo para obter um erro. De alguma forma, a opção é aplicada apenas aos nomes de arquivos que a seguem.
--), ele --error-unmatché tratado como apenas outro nome de arquivo (não no índice) e não tem efeito.
git ls-files | grep <PATTERN>? exemplo:git ls-files | grep Main.h
Se você não quiser encher seu console com mensagens de erro, também poderá executar
git ls-files file_name
e depois verifique o resultado. Se o git não retornar nada, o arquivo não será rastreado. Se for rastreado, o git retornará o caminho do arquivo.
Isso é útil se você deseja combiná-lo em um script, por exemplo, PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_nameprecisa ser uma correspondência exata (caminho completo + nome do arquivo), mas pode ser usado com curingas:git ls-files *foo.rb
EDITAR
Se você precisar usar o git do bash, existe a --porcelainopção de git status:
--porcelana
Forneça a saída em um formato estável e fácil de analisar para scripts. Atualmente, isso é idêntico à saída --short, mas é garantido que não será alterado no futuro, tornando-o seguro para scripts.
A saída é assim:
> git status --porcelain
M starthudson.sh
?? bla
Ou se você criar apenas um arquivo por vez:
> git status --porcelain bla
?? bla
ORIGINAL
Faz:
git status
Você verá um relatório informando quais arquivos foram atualizados e quais não são rastreados.
Você pode ver que bla.shé rastreado e modificado e newblanão é 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")
git status --porcelainé seu amigo, se você precisar de saída de análise pelo script, ter um olhar para o doc ligou-o mostrar algumas outras opções úteis
git status --porcelain error: unknown option porcelana Version é 1.6.0 :-)
Tente executar git statusno arquivo. Ele imprimirá um erro se não for rastreado pelo git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile, recebo o código de saída 1 (espera-se que 0 seja útil), mas ele não me dá "erro:" na saída. Prefiro analisar um código de saída do que a saída da string.
.gitignore
$ git status notthere:On branch master nothing to commit, working directory clean
Eu não conheço nenhum comando git que dê um código de saída "ruim", mas parece que uma maneira fácil de fazer isso seria usar um comando git que não fornece saída para um arquivo que não é rastreado, como arquivos git-log ou git-ls-files. Dessa forma, você realmente não precisa fazer nenhuma análise, pode executá-lo através de outro utilitário simples, como o grep, para ver se houve alguma saída.
Por exemplo,
Arquivos git-ls-test_file.c | grep.
sairá com um código zero se o arquivo for rastreado, mas um código de saída de um se o arquivo não for rastreado.
Sugiro um alias personalizado para você .gitconfig.
Você tem que fazer:
1) Com o comando git:
git config --global alias.check-file <command>
2) Editando ~/.gitconfige adicione esta linha na seção 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"
Uma vez iniciado o comando (1) ou o arquivo salvo (2), no seu espaço de trabalho, você pode testá-lo:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
usando git logdará informações sobre isso. Se o arquivo for rastreado no git, o comando mostra alguns resultados (logs). Senão está vazio.
Por exemplo, se o arquivo for rastreado pelo 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
....
....
Se o arquivo não for rastreado pelo git,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Apenas meus dois centavos:
git ls-files | grep -x relative/path
onde relative/pathpode ser facilmente determinado pressionando tabdentro de um shell de preenchimento automático. Adicione um adicional | wc -l para obter uma saída 1 ou 0.
grepopção --fixed-strings.