In ClearCase, come posso visualizzare la versione precedente di un file in una vista statica, dalla riga di comando?

In una vista statica, come posso visualizzare una vecchia versione di un file?

Dato un file vuoto (chiamato empty in questo esempio) posso sovvertire diff per mostrarmi la vecchia versione:

     % cleartool diff -ser File vuoto @@ / main / 28

Questo sembra un brutto scherzo. Ho perso un comando di base? C’è un modo più ordinato per fare questo?

(Non voglio modificare le specifiche di configurazione – è piuttosto noioso, e sto cercando di guardare un mucchio di vecchie versioni.)

Chiarimento : voglio inviare la versione del file allo stdout, quindi posso usarla con il resto di Unix (grep, sed, e così via.) Se hai trovato questa domanda perché stai cercando un modo per salvare un versione di un elemento in un file, vedere la risposta di Brian .

Sto provando a guardare un mucchio di vecchie versioni

Non sono sicuro se stai parlando di “un mucchio di vecchie versioni” di un file , “un mucchio di vecchie versioni” di diversi file.

Per visualizzare diverse vecchie versioni di un file, la media più semplice è visualizzare l’albero della versione ( ct lsvtree -graph File ), quindi selezionare una versione, fare clic con il tasto destro del mouse e ” Send To ” un editor che accetta più file (come Notepad ++). In pochi click avrai una visione di quelle vecchie versioni.
Nota: è necessario avere CC6.0 o 7.0.1 IFix01 (7.0.0 e 7.0.1 non riescono a “inviare a” un file con il seguente messaggio di errore ” Access to unnamed file was denied “)

Ma per visualizzare diverse vecchie versioni di file diversi, raccomanderei una vista dynamic e modificare le specifiche di configurazione di quella vista (e non la vista istantanea con cui si sta attualmente lavorando), al fine di selezionare rapidamente tutti quei vecchi file (si spera attraverso un semplice regola di selezione come ‘ element * aLabel ‘)


[Dai commenti:]

qual è il modo idiomatico di “accudire” una precedente revisione di un file?

Il modo idiomatico è attraverso una vista dynamic (che si configura con le stesse specifiche di configurazione della tua vista istantanea esistente).

È quindi ansible sfogliare (come in ‘cambia directory in’) i vari percorsi estesi di un file.

Se vuoi cat in tutte le versioni di un ramo di un file, vai in:

 cd /view/MyView/vobs/myVobs/myPath/[email protected]@/main/[...]/maBranch cat 1 cat 2 ... cat x 

1 ‘, ‘ 2 ‘, … ‘ x ‘ è la versione 1, 2, … x del tuo file all’interno di quel ramo.


Per una vista istantanea , il percorso esteso non è accessibile , quindi il tuo “hack” è la strada da percorrere.

Tuttavia, 2 osservazioni qui:

  • per visualizzare rapidamente tutte le revisioni precedenti di un file di snapshot in un determinato ramo, è ansible digitare:

(versione a una riga per copia-incolla, syntax Unix 🙂

 cleartool trova addon.xml -ver 'brtype (aBranch) &&! versione (... / aBranch / LATEST) &&!  version (... / aBranch / 0) '-exec' cleartool diff -ser vuoto "$ CLEARCASE_XPN" '

(versione multilinea per la leggibilità 🙂

 cleartool trova addon.xml -ver 'brtype (aBranch) && 
                                ! version (... / aBranch / LATEST) && 
                                !  Versione (... / aBranch / 0)' 
           -exec 'cleartool diff -ser vuoto "$ CLEARCASE_XPN"'
  • puoi rapidamente avere un risultato un po ‘più bello con

(versione a una riga per copia-incolla, syntax Unix 🙂

 cleartool trova addon.xml -ver 'brtype (aBranch) &&! versione (... / aBranch / LATEST) &&!  version (... / aBranch / 0) '-exec' cleartool diff -ser vuoto "$ CLEARCASE_XPN" '|  ccperl -nle '$ a = $ _;  $ b = $ a;  $ b = ~ s / ^> + \ s (?: file \ s + \ d +: \ s +)? // g; stampa $ b se $ a = ~ / ^> / '

(versione multilinea per la leggibilità 🙂

 cleartool trova addon.xml -ver 'brtype (aBranch) && 
                                ! version (... / aBranch / LATEST) && 
                                !  Versione (... / aBranch / 0)' 
          -exec 'cleartool diff -ser vuoto "$ CLEARCASE_XPN"'
 |  ccperl -nle '$ a = $ _;  $ b = $ a; 
                $ b = ~ s / ^> + \ s (?: file \ s + \ d +: \ s +)? // g;
                stampa $ b se $ a = ~ / ^> / '

In questo modo, l’output è migliore.


Il comando ” cleartool get ” (pagina man) menzionato di seguito da Brian non lo stdout:

Il comando get copia solo gli elementi del file in una vista.

Su un sistema UNIX o Linux, copia /dev/hello_world/[email protected]@/main/2 nella directory corrente.

 cmd-context get –to foo.c.temp /dev/hello_world/[email protected]@/main/2 

Su un sistema Windows, copia \dev\hello_world\[email protected]@\main\2 nella directory C:\build .

 cmd-context get –to C:\build\foo.c.temp \dev\hello_world\[email protected]@\main\2 

Quindi forse, collegando il risultato a un cat (o type windows), puoi fare qualcosa con l’output di detto comando cat ( type ).

 cmd-context get –to C:\build\foo.c.temp \dev\hello_world\[email protected]@\main\2 | type C:\build\foo.c.temp 

So che questo è un vecchio thread … ma non potevo permettere che questo thrashing andasse irrisolto ….

Le viste statiche hanno un comando “ct get” che fa esattamente quello che stai cercando.

 cleartool get -to ~/foo [email protected]@/main/28 

salverà questa versione del file in ~/foo .

[Riscritto in base al primo commento]

Tutti i file in Clearcase, incluse le versioni, sono disponibili nella struttura della directory virtuale. Non ho molta dimestichezza con le viste statiche, ma credo che passino ancora attraverso un virtual fs; vengono semplicemente aggiornati in modo diverso.

In tal caso, puoi semplicemente fare:

  cat [email protected]@/main/28 

Può diventare brutto se devi anche trovare la versione giusta di una directory che contiene quell’elemento file. Abbiamo uno script PERL al lavoro che utilizza questo approccio per analizzare le modifiche storiche apportate ai file e abbiamo rapidamente esaurito lo spazio della riga di comando su Windows per eseguire effettivamente i comandi!

Se File è un elemento Clearcase, e cat File funziona e la vista è impostata correttamente, quindi prova:

 cat [email protected]@/main/28 

(nota: senza la ct shell – non dovresti averne bisogno se sei già nella visualizzazione.)

Prova a digitare:

 ct ls -l File 

Se mostra il file con un nome esteso simile al precedente, dovresti essere in grado di catare il file usando un nome esteso.

ct shell cat File @@ version