Non c'è un problema sostanziale con i tag SVN?

7

Una pratica comune per i tag SVN consiste nel taggare diverse versioni per poterle trovare facilmente in seguito. A quanto ho capito, il tagging è la stessa cosa della ramificazione, che in due casi crea semplicemente una copia del trunk in una directory separata (sarebbe branches/something o tags/1.2.3 ), il che significa che:

  • Non c'è alcun impatto sulla quantità di dati memorizzati da SVN stesso (escludendo alcuni byte che indicano che un tag specifico corrisponde a una revisione specifica). Se il dump era 800 MB senza il tag, sarà ancora 800 MB più pochi byte con il nuovo tag.

  • I file vengono duplicati su disco al momento del ritiro. Un progetto che richiede 30 MB su disco impiegherà 60 MB una volta creato il tag.

Significa che:

  • Una volta creato un tag, ogni sviluppatore del mio team riceverà molti dati da SVN la prossima volta che aggiornerà.

  • Con dozzine o centinaia di tag (come succede di solito quando tagghi ogni versione), i checkout possono richiedere ore anche per un piccolo progetto.

Non è così problematico? Non potrebbe essere implementato in modo diverso, ad esempio attraverso svn propedit ? Ci sono casi validi in cui ha senso verificare il tag ogni , invece di uno solo?

Nota: come qualcuno che utilizza costantemente la distribuzione continua, non ho mai usato i tag in pratica, poiché ogni commit è potenzialmente distribuito in produzione se supera i test. Ciò significa che potrei aver perso qualcosa di fondamentale sui tag o sui loro interni, e mi dispiace se questo è il caso. Il mio interesse verso i tag deriva dal fatto che ho passato le ultime due ore a controllare un piccolo progetto di terze parti che ha oltre duecento tag.

    
posta Arseni Mourzenko 16.07.2015 - 16:45
fonte

2 risposte

19

Perché sarebbe un problema avere tronco e rami? Un tag è solo un altro ramo, ma (e forse questo è il bit importante) non è necessario eseguire il checkout dell'intero repository SVN.

Invece di chiamare svn co http://repo/ chiama svn co http://repo/trunk Quindi, se vuoi vedere un particolare ramo usa svn switch .

Tutti quelli che conosco che usano l'impostazione repo trunk / tags / branches eseguiranno il checkout di trunk o branch come root. In questo modo, non vedranno mai gli altri rami o tag a meno che non utilizzino l'opzione svn per scambiare la vista del repository su quella root.

Quello che descrivi è ancora più un problema con git che controlla l'intero repo e poi ti presenta con una vista basata su un singolo ramo o master. Tutti i file sono presenti (ma nascosti 'sotto' la vista corrente), quindi tecnicamente SVN è superiore a git in questo senso (cioè essere in grado di eseguire parzialmente il checkout di una parte di un repository è particolarmente utile quando si dispone di repository multi-gigabyte). / p>

Non è necessario utilizzare i tag se non si desidera, sono comunque solo un marker nel repository, essendo una copia economica del trunk che è stato taggato. Potresti, se preferisci, ricordare il numero di revisione (poiché si tratta di un valore univoco globale) per la revisione che hai taggato, ma in SVN non c'è modo di contrassegnare un numero di revisione con un moniker leggibile dall'uomo.

    
risposta data 16.07.2015 - 17:03
fonte
7

Le directory sparse di Subversion sono ciò che stai cercando.

Prima verifica, dovresti eseguire:

svn checkout --depth immediates <URL>

Questo farà solo il checkout del primo livello, quindi solo le directory se segui i rami /, i tag /, trunk / convention. Provalo; non scaricherà molto.

Quindi vai su tags /, ed esegui

svn update --set-depth immediates

Ora vengono visualizzate solo le directory che rappresentano i tag.

Passare a "trunk /" ed eseguire

svn update --set-depth infinity

Tutto il bagagliaio / verrà estratto.

E per rami /, puoi selezionare quali dovrebbero avere una profondità infinita o meno. Usa semplicemente i comandi appropriati dall'alto su ciascun ramo, seguendo i tuoi desideri.

    
risposta data 18.01.2018 - 15:26
fonte

Leggi altre domande sui tag