C'è un modo per sapere se un file viene monitorato eseguendo un git
comando e controllando il suo codice di uscita?
In altre parole: git tracking è un file?
C'è un modo per sapere se un file viene monitorato eseguendo un git
comando e controllando il suo codice di uscita?
In altre parole: git tracking è un file?
Risposte:
provare:
git ls-files --error-unmatch <file name>
uscirà con 1 se il file non viene tracciato
--error-unmatch
opzione prima del nome del file per ottenere un errore. In qualche modo l'opzione viene applicata solo ai nomi dei file che la seguono.
--
) --error-unmatch
viene trattata come un altro nome di file (non nell'indice) e non ha alcun effetto.
git ls-files | grep <PATTERN>
? esempio:git ls-files | grep Main.h
Se non vuoi ingombrare la tua console con messaggi di errore, puoi anche eseguire
git ls-files file_name
e quindi controllare il risultato. Se git non restituisce nulla, il file non viene tracciato. Se è tracciato, git restituirà il percorso del file.
Questo è utile se si desidera combinarlo in uno script, ad esempio PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
debba essere una corrispondenza esatta (percorso completo + nome file), ma può essere utilizzato con caratteri jolly:git ls-files *foo.rb
MODIFICARE
Se hai bisogno di usare git da bash c'è --porcelain
un'opzione per git status
:
--porcellana
Fornisci l'output in un formato stabile e di facile analisi per gli script. Attualmente questo è identico all'output --short, ma è garantito che non cambierà in futuro, rendendolo sicuro per gli script.
L'output è simile al seguente:
> git status --porcelain
M starthudson.sh
?? bla
O se fai solo un file alla volta:
> git status --porcelain bla
?? bla
ORIGINALE
fare:
git status
Vedrai un rapporto che indica quali file sono stati aggiornati e quali non sono stati rintracciati.
Puoi vedere che bla.sh
viene monitorato e modificato e newbla
non monitorato:
# 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
è tuo amico se hai bisogno di analizzare l'output per script, dai un'occhiata al documento collegato che mostra alcune altre opzioni utili
git status --porcelain error: unknown option
la versione della porcellana è 1.6.0 :-)
Prova a eseguire git status
il file. Stamperà un errore se non è tracciato da git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
ottengo il codice di uscita 1 (si prevede che 0 sia utile) ma non mi dà "errore:" nell'output. Preferirei analizzare un codice di uscita piuttosto che l'output di stringa.
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
Non conosco alcun comando git che fornisca un codice di uscita "errato", ma sembra un modo semplice per farlo sarebbe quello di utilizzare un comando git che non fornisce alcun output per un file che non è tracciato, come git-log o git-ls-files. In questo modo non è necessario eseguire alcuna analisi, è possibile eseguirlo attraverso un'altra semplice utility come grep per vedere se c'è stato un output.
Per esempio,
git-ls-files test_file.c | grep.
uscirà con un codice zero se il file viene tracciato, ma un codice di uscita uno se il file non viene tracciato.
Ti suggerisco un alias personalizzato su di te.gitconfig
.
Devi fare il modo di fare:
1) Con il comando git:
git config --global alias.check-file <command>
2) Modifica ~/.gitconfig
e aggiungi questa riga nella sezione 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 volta avviato il comando (1) o il file salvato (2), nell'area di lavoro è possibile testarlo:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
l'utilizzo git log
fornirà informazioni al riguardo. Se il file viene rintracciato in git, il comando mostra alcuni risultati (registri). Altrimenti è vuoto.
Ad esempio se il file è tracciato 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 il file non è tracciato git,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Solo i miei due centesimi:
git ls-files | grep -x relative/path
dove relative/path
può essere facilmente determinato premendo tab
all'interno di una shell di completamento automatico. Aggiungi un ulteriore | wc -l
per ottenere un output 1 o 0.
grep
un'opzione --fixed-strings
.