Ho riscontrato un comportamento che non mi aspettavo da Subversion e l'ho scoperto quasi per caso: un file modificato non viene contrassegnato come modificato.Perché Subversion non riesce a contrassegnare un file di foglio di calcolo Microsoft Excel modificato?
Ho un test unitario che coinvolge un foglio di calcolo di Microsoft Excel come file di input. Il test unitario calcola un checksum CRC; il mio test ha iniziato a fallire a causa del cambio di checksum.
Il file di test è memorizzato in SVN e ha tipo MIME "application/octet-stream" ed è quindi considerato binario da SVN.
Ho lo stesso comportamento di TortoiseSVN e del client della riga di comando SVN, in questo caso entrambi basati su SVN 1.6: quando il file viene aperto in Excel, il fatto che sia aperto deve essere codificato nel file stesso; SVN mostra che il file è stato modificato. Tuttavia, quando il file viene chiuso di nuovo (senza salvare), sembra tornare allo stato non modificato: ovvero, svn status
non elenca il file Excel; svn diff
non produce comunque alcun output a causa del fatto che i dati sono binari.
Il problema è che il file non effettua il confronto binario con il file archiviato nel repository. (Se una nuova copia viene esportata, non viene confrontata con la copia aperta e chiusa.) Il file è apparentemente invariato dal punto di vista dell'utente, quindi in senso semantico, la risposta SVN è ragionevole. Ma non sintatticamente; e SVN è essenzialmente sintattico.
La parte per la quale non riesco a trovare un motivo è perché SVN non contrassegna il file come modificato. Non riesco a immaginare che SVN abbia una gestione speciale per i file Excel (e in ogni caso il tipo MIME non è specificamente associato a MS Excel); non esiste una proprietà definita per la parola chiave SNV. Allo stesso modo, posso immaginare che Excel sappia qualcosa sui contenuti della sottodirectory nascosta di .svn in cui sono archiviate le informazioni di copia di lavoro SVN.
Avete qualche indizio su cosa sta succedendo qui?
Grazie, Rob.
Grazie. Sì, il problema è riproducibile. Sembra una probabile spiegazione; Ho praticamente detto questo nel mio commento alla risposta di Wim, ma è bello averlo osservato in modo indipendente. Controllerò questo (al lavoro, domani). – Rhubbarb
Solo per connettere: è esattamente quello che sta succedendo. Quando il file Excel viene aperto, il contenuto del file viene modificato (come si può vedere con ad esempio md5sum) e le modifiche all'ora modificate. Quando il file viene chiuso senza salvare, il contenuto del file non cambia, ma non torna allo stato originale; e il tempo modificato ritorna al valore prima dell'apertura. – Rhubbarb
Appena trovato questo: http://spreadsheetpage.com/index.php/oddity/who_last_opened_that_file/ sembra che Excel salvi il nome dell'apertore (e forse di più), anche se non lo salvi. Strano. – Martin