Come posso trovare la versione di copia di lavoro (SVN 1.7 vs 1.8) dando un'occhiata ai file all'interno di .svn
senza utilizzare alcuno strumento SVN?Scopri la versione di copia di lavoro SVN (1.7 o 1.8)
risposta
Mi stavo chiedendo da solo per un po 'e non sono riuscito a trovare una risposta da nessuna parte, nemmeno guardando il database SQLite. Così ho finito per esaminare il codice sorgente di Subversion, dove ho scoperto che la versione è effettivamente archiviata nel database, non stavo semplicemente cercando nel posto giusto. Ecco il frammento di rilevante dal subversion/libsvn_subr/sqlite.c
:
svn_error_t *
svn_sqlite__read_schema_version(int *version,
svn_sqlite__db_t *db,
apr_pool_t *scratch_pool)
{
(...)
SVN_ERR(prepare_statement(&stmt, db, "PRAGMA user_version;", scratch_pool));
(...)
}
non ero nemmeno a conoscenza del PRAGMA
dichiarazione, che, secondo la SQLite documentation è ...
... un'estensione SQL specifica per SQLite e usato per modificare il funzionamento della libreria SQLite o per interrogare la libreria SQLite per dati interni (non tabella).
Quindi, ipotizzando una versione ragionevolmente up-to-data di SQLite sul PATH
si può fare ...
sqlite3 .svn/wc.db "PRAGMA user_version"
... nella root della vostra copia di lavoro, che sarà poi resa per esempio 29
per Subversion 1.7.13 e 31
per Subversion 1.8.0. Sfortunatamente non sembra esserci alcuna lista correlata alla versione di Subversion user_version
, ma se sei interessato a cosa consistono effettivamente nelle modifiche del formato, puoi trovarle descritte nelle fonti in subversion/libsvn_wc/wc-metadata.sql
per il formato 20 in poi.
Update 1: Affrontare la questione di come recuperare il valore di user_version
senza un eseguibile SQLite: Hai bisogno di leggere un DWORD
all'offset 60
nel file di database, come specificato nel SQLite file format specification (vedi "1.2 Database Intestazione").
Aggiornamento 2: Per chiarire ulteriormente come visualizzare in un visualizzatore di file di testo/binario: Dal momento che gli attuali numeri di versione sono ancora piuttosto basso e in forma in un singolo byte (vale a dire che sono più piccolo di 255
) e una DWORD
è lungo quattro byte, al momento è sufficiente osservare il byte meno significativo, ovvero il numero di byte 64
. Di seguito è riportato uno screenshot di come appare in un file di database SQLite di Subversion 1.8.0 che contiene 31
per user_version
- come già menzionato sopra.
Update 3: mi è stato sempre alla ricerca di un modo per farlo "query binari" tali con uno strumento da riga di comando, per evitare di gettare Perl o tali al problema. Turns out there's a *nix utility for that called od
(e l'ho anche preso nella mia collezione di porte win32, yay!).od
può ottenere il byte meno significativo di user_version
come questo:
od -An -j63 -N1 -t dC .svn/wc.db
Questo sarà di nuovo in uscita 31
per Subversion 1.8.0 e così via.
Impossibile trovare la documentazione su questo finora, tuttavia la risposta breve è - è possibile. Sbircia nel file \.svn\format
. Ad esempio, il numero 12
significa che la copia di lavoro è in formato SVN 1.8. Presumo che se si tratta di SVN 1.7, vedrete lo 11
lì.
-1 No, non è così - l'ho provato con Subversion 1.7.13 contro 1.8.0 ed entrambi hanno restituito '12' nel file' format'. – zb226
Ciò potrebbe essere dovuto al fatto che quelle versioni condividono lo stesso formato di pronti contro termine ... – prodigitalson
OK, ma ciò non aiuta ancora a distinguere un 1.7 da un 1.8 WC - che è la domanda. Non è possibile operare su un 1.7 WC con 1.8 e viceversa. – zb226
Se esiste .svn/formato, quindi leggere il numero in esso:
Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
Se .svn/formato non esiste quindi il numero di versione è sulla prima riga in .svn/voci:
Version 10 is SVN 1.6
Version 12 is SVN 1.7
Questo è quello che ho provato, ma sembra che le mie copie di lavoro SVN 1.7 e SVN 1.8 mostrino entrambe la versione 12. –
@ThomasS. sei sicuro che entrambe le copie funzionanti siano SVN differenti? – Shafeeque
Lo sono, il formato è stato modificato da 1.7 a 1.8 e non sono compatibili tra loro. – mliebelt
- 1. Aggiornamento di Subversion Server da 1.7 a 1.8
- 2. Jenkins: versione non valida della copia di lavoro SVN
- 3. Come si copiano sottodirectory di una copia di lavoro in svn 1.7 mantenendo i metadati?
- 4. Problema di downgrade TortoiseSVN da 1.8 a 1.7
- 5. Undelete in SVN di lavoro copia
- 6. SVN: una copia di lavoro, due repository?
- 7. Come si determina la versione del layout di copia di lavoro SVN?
- 8. Come posso effettuare il downgrade della versione di una copia di lavoro SVN?
- 9. SVN Copia di lavoro su rami diversi Unisci senza commit su copia di lavoro Branch
- 10. SVN - Quando si contrassegna una copia di lavoro è ancora una copia economica?
- 11. Spostamento della copia di lavoro svn su un altro computer
- 12. Sposta la tua copia di lavoro
- 13. SVN - Cambia la copia di lavoro in punto nel nuovo percorso svn
- 14. Stessa copia di lavoro del codice con 2 server SVN
- 15. Come si dirama una copia di lavoro modificata con SVN?
- 16. Modifica profondità nella copia di lavoro SVN esistente senza riscaricamento
- 17. svn: rimuovere un esterno nella copia di lavoro?
- 18. SVN ignora che è locale alla copia di lavoro?
- 19. SVN: unire le modifiche locali in un'altra copia di lavoro
- 20. Will TortoiseSVN 1.7 funzionerà correttamente contro un repository SVN 1.6?
- 21. SVN: come confrontare la copia di lavoro con la revisione del repository?
- 22. android inapp-billing - scopri la versione API
- 23. Scopri la versione corrente di una cassa da un lint?
- 24. migrazione svn git non riuscendo con svn 1.8
- 25. Perché la patch rifiuta il mio file di patch su una copia di lavoro SVN?
- 26. Awesomium 1.7. Come cambia la versione del browser di awesomium?
- 27. Come selezionare o modificare la versione di JUnit in Eclipse?
- 28. L'aggiornamento a SVN 1.7 in locale richiede un aggiornamento nel repository?
- 29. Spostamento della copia di lavoro SVN dopo la ridenominazione della diramazione
- 30. non può impegnarsi in svn perché la copia di lavoro è sempre scaduta
possibile duplicato di [Come faccio a determinare SVN Copia di lavoro VERSIONE?] (http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-version) –
Esiste già una risposta più generale a questa domanda: http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-v ersion –
Possibile duplicato di * [Come si determina la versione del layout di copia di lavoro SVN?] (http://stackoverflow.com/questions/1364618) *. –