Come eliminare un file dalla cronologia di Plastic SCM

Quando si utilizza Plastic SCM, oggi chiamato Unity Version Control, cancellare un file dal workspace e fare un check-in non significa cancellarlo dalla cronologia del repository.

Il file rimane infatti disponibile nelle vecchie revisioni e può continuare a occupare spazio sul server.

Se, ad esempio, abbiamo committato per errore un grosso per mesi, la normale cancellazione del file non è sufficiente ma dobbiamo utilizzare invece il “temibile” comando cm purge.

Attenzione: il purge è un’operazione distruttiva e irreversibile. Unity specifica che, una volta eseguito, le revisioni purgate non possono più essere caricate. Prima dell’esecuzione è quindi fondamentale verificare esattamente cosa verrà eliminato.

Cancellare un file dal repository non è sufficiente

Supponiamo di avere un file /Build.zip committato decine di volte nei commit precedenti, anche dopo averlo cancellato dal un commit la cronologia continuerà a contenere tutte le precedenti revisioni.

Per poterlo purgare è necessario individuare l’ITEM ID di quel file attraverso il comando da Command Prompt (con privilegi di amministratore) CM FIND, in questo modo:

cm history "serverpath:/nomefile.zip#cs:numerocommit@nomerepository@dominio@cloud" --format="{1} | REV={6} | ITEM={12} | {0} | {13}"

Un esempio di comando completo può quindi essere il seguente:

cm history "serverpath:/Build.zip#cs:101@Hellpath@desdinovait@cloud" --format="{1} | REV={6} | ITEM={12} | {0} | {13}"

Verrà mostrata una lista di tutte le revisioni fatte di quel file per tutta la storia del repository, con date e dimensioni. Quello che è necessario verificare è la colonna dell’ITEM ID che riporterà sempre lo stesso valore.
Prendiamo nota di quel valore perchè è univoco in tutto il repository e necessario per la cancellazione.

Attenzione alla differenza tra revision ID e item ID

È importante non confondere questi due valori.

Il revision ID identifica una specifica revisione e cambia ogni volta che il file viene modificato.

L’item ID, invece, identifica l’item e rimane associato al file attraverso le sue revisioni.

Ad esempio:

REVISION     ITEM
34957        34996
39478        34996
39905        34996
...
141564       34996

Il comando di Purge

Il purge viene effettuato in tre fasi:

  1. registrazione dell’operazione;
  2. controllo delle revisioni che verranno eliminate;
  3. esecuzione definitiva.

La sintassi di registrazione, che ritornerà un GUID, è:

cm purge register "<estensione>" "<data>"

La documentazione ufficiale specifica che il comando register seleziona le revisioni appartenenti a una determinata estensione e precedenti alla data indicata. Inoltre vengono mantenute alcune revisioni necessarie, come almeno una revisione per ogni branch head e le revisioni etichettate.

Nel nostro esempio:

cm purge register ".zip" "2026-Feb-01" --repository="hellpath@desdinovait@cloud"

Controllare il purge prima di eseguirlo

Il comando purge register restituisce un GUID, ad esempio:

1024cc86-7d9c-4a81-36a4-82944b21071b

Possiamo quindi analizzare il purge con il comando seguente

cm purge show 1024cc86-7d9c-4a81-36a4-82944b21071b --verbose

L’opzione –verbose è particolarmente importante perché mostra gli item e le revisioni coinvolte con le dimensioni di cancellazione (spazio che guadagneremo sul repository in cloud).

Nel nostro esempio l’output potrebbe essere:

PurgeId: 1024cc86-7d9c-4a81-36a4-82944b21071b
Repository: Hellpath
Status: ReadyToPurge
Purge size: 35 revisions, 2,80 GB

.zip: 35 revisions, 2,80 GB
  /Build.zip: (35 revisions, 2,80 GB)

Se il risultato non è quello desiderato

Se il purge show --verbose mostra file che non vogliamo eliminare, non bisogna eseguire il purge.

Un purge registrato ma non ancora eseguito può essere rimosso con:

cm purge unregister 1024cc86-7d9c-4a81-36a4-82944b21071b

Eseguire definitivamente il purge

Quando abbiamo verificato attentamente l’elenco, possiamo eseguire:

cm purge execute 1024cc86-7d9c-4a81-36a4-82944b21071b

ATTENZIONE: Questa operazione non è reversibile.

Come verificare che il purge sia realmente avvenuto

Possiamo consultare la cronologia dei purge tramite il comando history:

cm purge history --verbose

Questo comando permette di verificare lo stato delle operazioni di purge eseguite sul server e conserva informazioni come data, autore, dimensione e tipologia dei dati coinvolti.

Perchè cm find revision continua a mostrare le vecchie revisioni?

Dopo il purge potremmo ancora vedere le revisioni nei risultati di:

cm find revision "where itemid = 34996 on repository 'Hellpath@desdinovait@cloud'"

Questo non significa necessariamente che i dati del file siano ancora disponibili.

La verifica decisiva è tentare di recuperare il contenuto di una revisione che sappiamo essere stata purgata.

Nel nostro esempio:

cm cat revid:34957@Hellpath@desdinovait@cloud

il comando resituirà:

Can't retrieve the content of the file ...
because the revision (id:34957) was purged
and its content is no longer available.

Questa è la conferma concreta che il contenuto della revisione è stato effettivamente rimosso.

Copyright © Desdinova ® / PIVA 03799780162 / Non è una testata giornalistica.
Tutti i diritti riservati ai legittimi proprietari, anche ove non citati.