Domanda

Da alcuni anni, sto aspettando per Subversion per caratterizzare una funzione di "eliminare definitivamente" (cancellare). Ho esitato a fare la transizione a Subversion (provenienti da Visual SourceSafe: p), perché credo che questo è una caratteristica essenziale, altrimenti mi aspetto il repository di crescere unstopably. Tuttavia, per un motivo o per l'altro, la funzione viene rimandato più e più volte. Così comincio a chiedevo se c'è qualche altra caratteristica o una soluzione alternativa che rende la funzione Obliterate superflua.

Che cosa fate quando si desidera ridurre il repository centrale SVN?

Esempio 1 : I in una grande terzi biblioteca , e dopo un paio di settimane mi rendo conto che non è adatto per le mie esigenze. Non voglio che per memorizzare e backup che grandi quantità di dati per sempre.

Esempio 2 :. Ho 10 versioni di 10 grandi librerie di terze parti nel repository, ma io uso solo le ultime versioni

Esempio 3 : ho accidentalmente controllato le informazioni sensibili (come suggerito da John ).

Esempio 4 :. Ho accidentalmente controllato in alcuni file di grandi dimensioni che non avrebbero mai dovuto essere messo nel repository

È stato utile?

Soluzione

C'è una discreta quantità di discussione svn obliterate sul biglietto problema a Apache sito Subversion , la maggior parte di esso che termina circa 2008. sembra che ci sia un accordo generale che si tratta di una buona capacità di avere, anche se il suo uso dovrebbe essere raro.

Ci sono due ragioni principali per lo vogliono.

In primo luogo, il check-in informazioni riservate può essere un problema. Lasciando in là, cancellato, non è necessariamente un'opzione, a seconda del livello di riservatezza e l'esposizione del repository.

In secondo luogo, il check-in una grande quantità di cose che non dovrebbero essere messi in grado di aumentare drasticamente la dimensione del repository. Lo spazio su disco è generalmente a buon mercato al giorno d'oggi, ma non è illimitato, e ci sono altri modi spazio file può importa. Se è necessario inviare un repository su una connessione di rete, questo è il tempo in più che può o non può essere importante. Ci possono essere dei vantaggi reali per essere in grado di masterizzare un CD-ROM o DVD-ROM che contiene l'intero repository.

Pertanto, è una capacità utile che viene attualmente eseguita dal dumping, filtrando, e ricaricare il repository. Questo è soggetto a errori secondo i rapporti che ho visto, può essere lento, e richiede lo spegnimento del repository.

Ovviamente, non è una caratteristica di alta priorità per il team di Subversion, dato che ciò che è necessario per parecchi anni è qualcuno per fare il lavoro a venire con un disegno e la sua attuazione. Dopo tutto, dovrebbe essere fatto molto di rado, e non v'è una soluzione. Tuttavia, chiunque voglia fare un sacco di lavoro su Subversion potrebbe fornire una patch che (se abbastanza buono qualità) probabilmente essere implementato.

Altri suggerimenti

E 'viola il significato di controllo del codice sorgente.
Controllo del codice sorgente è tutto di essere in grado di ripristinare uno stato precedente. Se si elimina un file in modo permanente non sarà in grado di farlo.

OTOH non so VSS quindi potrei aver frainteso "eliminare definitivamente"

L'ovvia ragione contro di essa è perché gli sviluppatori pensano che sarà a conti fatti fare SVN peggio - la felicità si sente a essere in grado di potare roba non necessari sarà notevolmente sminuito dalla vostra rabbia quando cancellare accidentalmente qualcosa e il vostro / trunk scompare.

FogBugz ha esattamente lo stesso comportamento, e nel loro caso è del tutto dal disegno Credo, proteggendo gli utenti da se stessi.

Obliterate viola i principi di controllo versione che si vorrebbe avere. O non sarebbe salvare qualsiasi spazio o tag precedenti sarebbe diventato rotto. Non sarebbe in grado di tornare ad una vera e propria versione precedente, se si aveva cancellato tutti i file.

Per quanto riguarda i suoi commenti su repository crescente ... Qualsiasi repository crescerà linearmente con la dimensione delle variazioni nel tempo. Questo è il punto centrale di un sistema di controllo del codice sorgente. Se non c'è bisogno di essere in grado di tenere traccia delle versioni precedenti, allora perché non solo attenersi a una cartella condivisa da qualche parte?

Subversion Obliterate, la funzione dimenticato , ci sono tre componenti alla domanda, il problema , motivo e em> soluzione <. Dal momento che si è iniziato con la questione alla soluzione, inizierò con questo.

Soluzione

Come avrete notato, non v'è alcuna grande soluzione. Soprattutto se si tratta di un grande repository aziendale, dal momento che la soluzione diventa più duro è il più grande è il repo ottiene. C'è una funzione chiamata discarica / filtro attraverso il quale è possibile ripulire il repo di roba che non si vuole, ma non è così facile da usare, non veloce e non dipendente.

C'è stato un piccolo sforzo (seguire il filo ) sulla squadra svn per ottenere una caratteristica obliterate in là dopo il 2008, ma lo sforzo è morto di una morte silenziosa.

Il problema

L'articolo che ho detto all'inizio ha in realtà una buona lista di casi d'uso in cui uno avrebbe bisogno di un comando obliterate e nel 516 problema filo gli sviluppatori in realtà ha riconosciuto il suo merito.

Purtroppo, sembra troppo tardi per questo ora; la ragione vera non è mai stato aggiunto in seguito, era che ormai quasi impossibile per la sua attuazione, come si aggancia nel codice al livello più fondamentale (vedi anche piccolo sforzo legame in soluzione).

FAQ :

  

Le revisioni sono alberi immutabili che costruiscono l'uno sull'altro. Rimozione di una revisione dalla storia causerebbe un effetto domino, creando il caos in tutte le successive revisioni e possibilmente invalidare tutte le copie di lavoro.

Il motivo

Il problema è che in origine la funzione obliterate è stato respinto in quanto non era conforme al principio del vero controllo di versione.

Anche in questo caso dalla FAQ :

  

Come faccio a rimuovere completamente un file dalla storia del repository?    Ci sono casi particolari in cui si potrebbe desiderare di distruggere tutte le prove di un file o commettere. (Forse qualcuno ha commesso accidentalmente un documento riservato). Questo non è così facile, perché Subversion è volutamente progettato per non perdere le informazioni .

Tuttavia

Ho lavorato con SVN per un sacco di clienti si con le squadre più grandi e più ampio progetto e in fondo non ha mai avuto un problema reale. Sì, i casi d'uso menzionati mandato una caratteristica Obliterate, ma finora io non sono convinto che questo è un problema che si ha più e più volte ovunque tu vada. Naturalmente, la natura di questo particolare problema è che devi solo fare un errore una volta e non può essere annullato correttamente.

A causa di rimuovere i dati dal repository rompe la premessa di base di controllo del codice sorgente, che è che è possibile riprodurre tutti gli stati precedenti e le modifiche all'albero dei sorgenti. Se si vuole cancellare qualcosa dal controllo di versione, probabilmente stai "facendo male", come si suol dire.

Io uso diversi sistemi di controllo versione per circa 15 anni e mai avuto bisogno di una caratteristica del genere.

Mi chiedo quali sono le ragioni che si desidera che la funzione:

  • spazio su disco? Difficile da credere considerando il prezzo di spazio su disco
  • commesso una password per il controllo di versione? Bene che vi insegnerà. Andate a cambiare la password
  • velocità del repository? Non sembra così, ma se vorrei prendere in considerazione un sistema completamente diverso con presumibilmente migliori prestazioni.

E 'possibile ridurre le dimensioni di un repository SVN effettuando una discarica e di carico. In sostanza se si dice che non si desidera ripristinare qualcosa di più di un paio d'anni, è possibile eseguire il dump del repository, il filtro in base al tempo, quindi ricaricare la discarica. Volendo per sbarazzarsi di un singolo file a causa delle dimensioni è probabilmente un'indicazione che il file non apparteneva in realtà in un sistema di controllo del codice sorgente, in primo luogo.

C'è un po 'di scripting che consente di cancellare i dati. Seguire questa mailing list discussione per maggiori informazioni.

E 'un modo difficile da fare come l'essenza del controllo di versione non è perdita di dati, al contrario di eliminarlo in modo permanente. Ma se si potare una volta l'anno o qualcosa di simile che possono essere fatto.

L'intero punto di controllo del codice sorgente è di avere una storia completa di ciò che il repository assomiglia. Il comando obliterate sconfitte Questo scopo di controllo del codice sorgente, e si tratta di un misfeature in tutti i sistemi di controllo versione che ce l'hanno.

SVN ha la copia a buon mercato e ramificazione a buon mercato che non richiede una copia completa del file - solo le parti modificate. Il suo repository centrale è di solito molto gestibile in termini di dimensioni, rendendo questo misfeature superflua.

Obliterate non è una caratteristica essenziale di Subversion, perché rompe in realtà i principi fondamentali del controllo di versione (che è: di registrare tutta la storia).

E non è una caratteristica essenziale, perché ci sono soluzione per ottenere questo fatto comunque (utilizzando svnadmin e filtraggio).

Inoltre, la funzione è attualmente molto lavorato. Vedere questo post per i dettagli.

Ultimo ho controllato è stato inteso come una caratteristica ADMIN, e l'amministratore può già scaricare / filtro / broken_workaround e rimuovere la storia comunque. Per quanto riguarda la pista di controllo, questo non cambia la citazione corrente. Si renderebbe meno orribile, se qualcosa deve assolutamente rimosso.

svnadmin obliterate è una delle caratteristiche più richieste, il dev finalmente ammettere che dovrebbe esistere (finalmente! Dopo 8 anni !!!). E la pubblicità di non esistente, è a caccia di utenti da SVN.

Purtroppo ho dovuto imparare su questa "caratteristica mancante" nel modo più duro. Da quando è la funzionalità di base una caratteristica? I nuovi utenti stanno iniziando a interessare questo ed evitare SVN. Quanto a me, io uso Git.

Non mi piace la mia opinione? Linus di cui gli sviluppatori SVN come idioti, e l'intero sistema centralizzato viziata. Mi fido di Linus come un vero esperto, e in particolare che sa di sorgente.

Quello che faccio - Non utilizzare la sovversione. Siamo spiacenti.

Si (gli sviluppatori) obvoiously non sono d'accordo con la vostra valutazione di che essere una caratteristica critica. Non si è fermata l'azienda per cui lavoro in al momento di usarlo;.) io personalmente escludo la sovversione per questo motivo esatto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top