2013-10-03 10 views
8

La mia domanda è questa: cosa potrebbe causare Mercurial per indicare (tramite "status" o TortoiseHgWorkbench) i file come "Modificati" quando sono invariati?hg mostra i file modificati che sono invariati, perché potrebbe essere?

Ecco la situazione: ho un repository locale su una macchina Linux. Lavoro solo con il repository sulla macchina Linux. Tuttavia, ho una copia esatta del repository (e del file di lavoro) su una macchina Windows (mi sincronizzo tramite un'unità flash, usando BeyondCompare). Al mio miglior ricordo, non invoco mai mercurial sulla macchina Windows, sebbene sia installata lì.

Recentemente ho voluto eseguire un commit sulla macchina Linux e molti file che non mi aspettavo di visualizzare erano elencati come "Modificati". Ho fatto un diff visivo (usando BeyondCompare) che indica che la copia della directory di lavoro è "binaria identica" al genitore nel repository. TortoiseHgWorkbench mostra il file "modificato" e la finestra delle differenze mostra l'intero file, in verde, (come se il repository avesse un file vuoto, immagino). Sul file in questione, la data del file sul file system è vecchia di un mese, mentre il mio ultimo commit (ho commesso tutti i file modificati) era un paio di settimane fa. Alcuni file non modificati appaiono come "modificati", ma altri no. Non ho mai visto questo comportamento in precedenza, quindi sono un po 'confuso.

Ho eseguito "hg verify" nel repository e non ha rilevato nulla di interessante.

Immagino che non sia un grosso problema dato che tutti i file nella directory di lavoro sono intatti, e se dovessi commettere i file (anche se sono invariati), non sono sicuro che qualcosa sarebbe danneggiato. Ma sono desideroso di capire cosa è successo.

Grazie in anticipo per qualsiasi idea su cosa cercare.

[EDIT]

ancora non hai trovato una causa principale (permessi dei file e le date di accesso invariati), ma la risposta di @ barjak mi ha segnalato nella direzione in cui ho trovato questo: Why does "hg status" show changed files when "hg diff -g" doesn't? (One parent). La mia situazione è la stessa descritta qui (sia hg diff che hg diff --git mostrano solo i file che sono realmente cambiati, mentre lo stato di hg mostra alcuni file non modificati). BTW sto usando Hg 2.6.

[EDIT]

Se è utile a nessuno, ecco come sono tornato in un repository normale:

in un guscio:

cd src 
hg diff --git > ../junk 
grep "\-\-git" ../junk 

in tortoiseHgWorkbench

uncheck all files marked "M" 
check all files indicated in the grep results above (i.e., have real diffs) 
commit 

in una shell:

hg revert --all 

quindi pulire la directory di lavoro (ripristinare - tutti hanno generato alcuni file defunti. Ripristino anche alcune date dei file (sono l'unica persona che utilizza questo repository e le date dei file sono utili per me. Sì, c'è un'estensione Hg per ripristinare le date dei file ma non l'ho ancora installato).

Questo processo mi ha fatto ripartire tutti.

+0

In BC3, in Sessione-> Impostazioni sessione, nella scheda Confronto è impostato su "Confronto binario" o "Basato su regole". Che tipo di file stai confrontando? – Edward

+0

Il confronto è impostato su "Basato su regole". Il file è un file sorgente C++. Il risultato BC3 di "binario stesso" è effettivamente corretto. Ora vado a considerare la possibilità di "permessi" come suggerisce @barjak. (la prima ispezione sembra che le autorizzazioni non siano cambiate, ma scaverò un po 'di più ...) –

+0

Per me questo succede se devo usare Windows di Microsoft. Se lo uso per il commit, quindi se mai aggiornare a questa revisione, quindi i file ci vengono mostrati modificati. (Forse MS Windows sta salvando qualcosa sul repository, che non è/o non può essere rappresentato da Unix). –

risposta

10

Un file può essere contrassegnato come modificato anche quando vengono modificate le autorizzazioni Unix. Prova hg diff -g per verificare le autorizzazioni.

+2

Ancora non conosco la causa principale di questo problema (se qualcuno ha qualche idea in più, sono comunque interessato), ma questa risposta mi ha indirizzato in una direzione utile. –

+0

Ha avuto lo stesso problema e l'uso dell'opzione -g mi ha mostrato che le autorizzazioni sono state modificate per il file. – Alex

2

Solo un ripristino non mi ha aiutato.I file rimarrebbero nello stato modificato anche se li avevo commessi. Se provassi a commetterlo di nuovo. Così ho appena cancellato i file che si presentavano come modificati (fai un backup se necessario) che ha causato la visualizzazione di tutti i file con! accanto ad essa, quando mi sono imbattuto

hg st 

Dopo che ho eseguito il seguente comando per ripristinare i file (che sono stati già controllato in):

hg revert --all --no-backup 

e che ha risolto il problema