2014-11-14 17 views
5

Attualmente mantengo un progetto per un prompt git per bash (https://github.com/magicmonty/bash-git-prompt) e ho appena ricevuto un bug report (https://github.com/magicmonty/bash-git-prompt/issues/97) da qualcuno che lavora con Docker, che mi dice che ogni volta che usa il prompt, la cache viene invalidata, perché la directory .git viene costantemente toccata.Qualcuno può spiegare, perché "git status" tocca la directory .git?

Ho esaminato questo e ho scoperto che è il comando git status, che tocca la directory .git. Sembra che solo la voce della directory stessa e nessun contenuto siano toccati. Qualcuno può spiegare, perché è necessario, o forse questo è un bug in Git.

C'è un modo per mostrare tutte le informazioni di stato, senza toccare la directory .git?

Grazie per l'aiuto

Aggiornamento:

Dal momento che l'unica ragione per utilizzare il comando git status era, per determinare il numero di file non monitorate, ho sostituito con git ls-files --others --exclude-standard | wc -l, che non ha bisogno di una serratura .

+4

Una rapida occhiata a uno 'stato di git strace 'mostra che questa azione utilizza un file di lock' .git/index.lock' –

risposta

6

strace git status indica che questa azione utilizza il file di blocco .git/index.lock, ecco perché il tempo di .git viene aggiornato.

git cool, utilizza la variabile di ambiente GIT_INDEX_FILE per decidere quale file di blocco utilizzare. Se non impostato, git utilizza .git/index (questo è il valore predefinito), ma se impostato, git utilizza il suo valore. Da man git:

GIT_INDEX_FILE

Questo ambiente permette di specificare un file di indice alternativo. Se non specificato, viene utilizzato il valore predefinito di $GIT_DIR/index.

Quindi:

GIT_INDEX_FILE=banana git status 

non aggiornerà mtime 's tuoi .git.

Quindi ora devi prendere una decisione come se vuoi seguire questa strada o meno (che ha certamente molti avvertimenti).

Buona fortuna!

+0

Che dovrebbe funzionare. Grazie. – magicmonty

+0

Va notato che il file di indice deve essere copiato nel nuovo file specificato prima di usare il comando 'git status'. Altrimenti git troverà qui un indice vuoto. – magicmonty

+0

@magicmonty Una possibilità è creare un collegamento (e non copiare). –

Problemi correlati