2011-02-10 8 views
5

Abbiamo un repository Mercurial convertito da Subversion qualche tempo fa e oggi ho notato che ci sono file nel repository che hanno no storia.File nel repository dopo clone, ma nessuna cronologia

Uno dei sympomts di questo comportamento è che hg status riporta il file come pulito, mentre hg log report non di modifiche per lo stesso file:

> hg clone [repo] 
> hg st -c FileWithMissingHistory.cs 

C FileWithMissingHistory.cs 

> hg blame FileWithMissingHistory.cs 
FileWithMissingHistory.cs: no such file in rev [...] 
> hg log FileWithMissingHistory.cs 
> hg log FileWithMissingHistory.cs -f 
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs" 

> hg log -v | grep FileWithMissingHistory.cs 

[gives output, there arechangesets mentioning the file] 

Ovviamente i nomi di file sono stati modificati nell'esempio. Ho provato a utilizzare hg verify, ma questo comando segnala che il repository è a posto. Qualcuno ha vissuto questo e c'è qualcosa che potremmo fare per riportare la storia "alla vita"? Posizionare la cronologia fittizia sui file in questione sarebbe accettabile, ma non ottimale.

EDIT: ho fatto un po 'di indagine e ho notato che "FileWithMissingHistory.cs" è stato rinominato da un altro nome di file (copia Hg + canc) nella revisione 238. Se io hg update -r238 e hg accedo il file in questa revisione non ha alcuna storia. Fare hg logg sul file originale riporta la cronologia come previsto, quindi sembra che la cronologia sia in qualche modo persa durante la copia (di nuovo, il file viene rinominato usando hg copy, e il changeset indica chiaramente che il file è stato copiato).

+1

Qual è l'output dei seguenti comandi? 'versione hg',' hg identifica', 'hg riassunto' e' hg verifica'? E 'hg manifest' elenca il file? –

+0

versione hg = 1.7.3, hg identifica l'id del changeset corrente (nient'altro), il riepilogo hg stampa il commit w/message e il genitore (un solo genitore). hg manifest elenca il file in questione. – larsmoa

+0

che dire di 'hg verify'? –

risposta

1

Ho finalmente rintracciato la causa degli effetti di cui sopra e sembra che questo sia causato da problemi di involucro misto. Alcuni file si trovano in directory con nomi in minuscolo mentre altri si trovano nelle directory con nomi uguali, solo che il caso è misto (ad esempio "directory/FileWithHistory.cs" e "DiReCtOrY/FileWithMissingHistory.cs"). Su Windows, entrambi i file si troveranno nella stessa directory causando problemi.

+0

Avevo un problema simile a quello in cui il mio file .hgignore aveva uno schema che stava causando l'hg di ignorare alcuni dei miei file di progetto che contenevano la parola "impostazioni". – JulianDavid

2

Suoni strani, in realtà impossibile. Quello che vorrei provare a eseguire il debug di questo problema è aggiornare a diverse revisioni e verificare in quale revisione il file appare nella copia di lavoro la prima volta. Se si esegue questa operazione in modalità di ricerca binaria (simile a come funziona lo bisect extension), si dovrebbe trovare una revisione che introduce il file dopo alcuni aggiornamenti.

Questo non risolve il problema, ma può aiutare a rintracciare la sua fonte.