2016-02-11 5 views
8

Come rendere msysgit per analizzare i file per le modifiche reali?Eseguire git deep scan per confrontare i file in modo reale

Attualmente sembra fare affidamento sui timestamp dei file e quindi commette errori: non mostra differenze dove ci sono.

Ho provato git update-index --refresh e git update-index --really-refresh. Entrambi i comandi escono immediatamente e non sembrano eseguire una scansione e un confronto binario di ogni file nell'albero.

Una citazione da another question:

Impostazione core.trustctime-false rende git ignorare le modifiche spuri a ctime che avviene a quanto pare su alcuni file system. Ho bisogno del comportamento opposto: ri-calcolare l'hash del file anche quando mtime non è cambiato.

+2

http://stackoverflow.com/questions/9321253/how-to-make-git-check-every-files-contents-even-though-stat-info-may-non-have-c –

+1

@Josh Lee : Devo ammettere che la domanda è la stessa, ma ci sono alcune considerazioni per lasciare la mia domanda: 1. Questa domanda non ha ancora una soluzione; 2. Non ho trovato quella domanda per parole chiave. Può essere che sia formulato in modo che nessuno possa trovarlo ?; 3. questa domanda ha 3 anni e ha solo 129 visualizzazioni. – Paul

+0

Mentre non c'è una risposta, la domanda è ancora un duplicato. Contrassegnato come tale, sarà trovato dalle parole chiave. Considera il bounty bump. – Basilevs

risposta

6

In primo luogo, dovresti provare a trovare la radice del problema. L'uso delle informazioni statuali da parte di Git (non solo timestamp, ma anche dimensioni) è normalmente molto affidabile. Se hai problemi con esso, molto probabilmente significa che hai qualcosa di gravemente danneggiato nel tuo sistema. Git non sarà l'unico strumento da spezzare quindi (molto probabilmente lo saranno anche il tuo sistema di backup e il tuo sistema di costruzione).

Si può provare questo (dopo aver letto l'avvertimento di seguito):

rm -f .git/index 
git reset HEAD 

Il comando rm sarà ovviamente scartare qualsiasi informazioni nell'indice, ovvero: tutte le informazioni stat che Git utilizza internamente per evitare il confronto di file (cosa ti aspetti) e qualsiasi git add, git reset, informazioni sui file non contenuti che potresti aver disabilitato nel tuo indice. Questo non cambierà alcuna informazione impegnata, d'altra parte. Il comando git reset HEAD creerà un nuovo indice che corrisponde a HEAD, ad esempio dopo questo comando, Git ritiene che non siano state apportate modifiche nell'indice.

Git ripristinerà le informazioni di stato (ovvero ripete l'intero confronto di file) al momento di git reset HEAD, quindi questa è una soluzione per dire a Git "dimentica le informazioni di stato ora", per correre dopo aver infranto le tue informazioni di stato, ma non è un modo per dire a Git "non usare mai più le statistiche".

+0

In questo momento non riesco a ricordare cosa stavo facendo per raggiungere il risultato. Possono essere i file decompressi da un archivio. A causa della precisione, accetto la tua risposta. – Paul

2

Una cosa che puoi fare è aggiornare il timestamp di tutti i file al tempo corrente; puoi farlo con find . -exec touch {} \;

+1

Sì, ci ho pensato, ma è solo una soluzione, non la vera soluzione. – Paul

Problemi correlati