Domanda

Vorrei usare il mio diff quando si lavora in un clearcase istantanea.

Per quanto posso vedere, non c'è modo di specificare un diff strumento durante l'esecuzione "cleartool diff", quindi pensavo che si potrebbe eseguire qualcosa di simile "mydiff <predecessor file> <modified file in my view>"ma io non so abbastanza di ClearCase per essere in grado di trovare il "predecessore file di" diff contro.

Qualche modo per fare questo?

Ho dimenticato di dire che fino a oggi, dopo aver letto le prime due risposte trattare con windows che su Unix, e non mi è permesso di letame con la ClearCase di configurazione.

È stato utile?

Soluzione 5

ho ottenuto un altro modo di lavoro sulla base dei suggerimenti qui. Ho scoperto il cleartool "ottengo" di comando, quindi eseguo questo per ottenere la versione precedente di un file temporaneo:

cleartool get -per fname.temp fname @@ predecessore

Quindi eseguire il mio diff, ed eliminare il file.

Grazie per tutti i suggerimenti.

Altri suggerimenti

Come cambiare strumenti di default diff

È possibile specificare uno strumento di diff esterno da modificando il file mappa , in "c: \ programmi \ razionale \ ClearCase \ lib \ MGRS"

Il WinMerge suggerita da Paul modifica in realtà quel file.

Ogni linea mappa ha 3 parti: il tipo di file CC, l'azione CC, e l'applicazione.

Trova la sezione nel map file per i tipi di file text_file_delta. Vi si possono trovare le linee per le azioni CC COMPARE, xcompare, unire e xmerge che assomigliano a questo:

text_file_delta   compare          ..\..\bin\cleardiff.exe
text_file_delta   xcompare         ..\..\bin\cleardiffmrg.exe
text_file_delta   merge            ..\..\bin\cleardiff.exe
text_file_delta   xmerge           ..\..\bin\cleardiffmrg.exe

Si possono sostituire con la di vostra scelta strumento diff .


Oppure, un semplice script diff

Se si vuole andare completa della riga di comando su questo (che mi piace ;-)), un po 'ccperl può aiutare:

#!/bin/perl
my ($file, $switches) = @ARGV;
$switches ||= '-ubBw';

my ($element, $version, $pred) 
    = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`);

unless ($pred) { die "ctdiff: $file has no predecessor\n"; }

exec "mydiff $switches $element\@\@$pred $file";

Attenzione: percorso esteso (@@\...) è accessibile solo in vista dinamico (M:\..., non Istantanea vista (c:\...)

.

Lo script non ha nulla a che fare con la mapfile presentate sopra:

  • che i file definisce 'Tipo Merge Managers'.
  • Questo script consente di eseguire qualsiasi gestore di unione su qualsiasi file che si desidera, senza leggere qualsiasi file di mappa per cercare l'exe diff diritto di utilizzare per un dato file.

Qui, si fornisce allo script entrambe le informazioni: il file (come parametro) e l'exe diff per l'esecuzione (nell'ambito dell'attuazione script: sostituire mydiff con qualsiasi exe diff che volete)

.

oppure, migliorato Script Diff (lavori in vista statico / snapshot troppo)

Ecco una versione di questo script che funziona sia per snapshot e visione dinamica.

Per visione istantanea, io uso del chacmool suggerimento: cleartool get

.

Anche in questo caso, è possibile sostituire il comando diff inclusi in questo script dallo strumento di tua scelta.

#!/bin/perl
my ($file, $switches) = @ARGV;
$switches ||= '-u';

my ($element, $version, $pred) 
    = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`);

unless ($pred) { die "ctdiff: $file has no predecessor\n"; }

# figure out if view is dynamic or snapshot
my $str1 = `cleartool lsview -long -cview`;
if($? == 0) { dodie("pred.pl must be executed within a clearcase view"); }
my @ary1 = grep(/Global path:/, split(/\n/, $str1));
if($str1 =~ /View attributes: snapshot/sm) { $is_snapshot = 1; }

my $predfile = "$element\@\@$pred";
$predfile =~ s/\'//g;#'
#printf("$predfile\n");
if ($is_snapshot) { 
  my $predtemp = "c:\\temp\\pred.txt";
  unlink($predtemp);
  my $cmd = "cleartool get -to $predtemp $predfile"; printf("$cmd\n");
  my $str2 = `$cmd`;
  $predfile = $predtemp;
}
sub dodie {
    my $message = $_[0];
    print($message . "\n");
    exit 1;
}

exec "diff $switches $predfile $file";

Un'altra opzione è quella di utilizzare Git + ClearCase (o vedere questo o questo ) e appena diff con Git.

Questo è molto facile da configurare e, nella mia esperienza, mi fa male in realtà il cervello meno di utilizzare due sistemi VCS in una sola volta che cercare di battere CC in essere uno strumento del 21 ° secolo.

Basta pensare a Git come un ponte tra CC e diff: -)

Sembra che qualcuno già pensato a questo proposito sul snip2code!
Ecco uno script bash tcsh che fa esattamente quello che vuoi.

Custom-diff-tool- per-ClearCase-oggetto

Come si può vedere il seguente è il codice della chiave per ottenere la versione precedente di un dato file:

cleartool descr -pred -short $1

Dove $1 è il nome del file da confrontare.


#!/bin/tcsh -e
set _CLEARCASE_VIEW = `cleartool pwv -short -setview`
echo Set view: "$_CLEARCASE_VIEW"
set my_firstversion = ""
set my_secondversion = ""
set my_difftool = kdiff3

# check clearcase view
if ( "$_CLEARCASE_VIEW" == "** NONE **" ) then
  echo "Error: ClearCase view not set, aborted."
  exit -1
endif

if ( "$1" == "" ) then
  echo "Error: missing 1st file argument!"
  echo "Eg: `basename $0` file1.txt -> This will diff file1.txt with its previous version"
  echo "Eg: `basename $0` file1.txt file2.txt -> This will diff file1.txt and file2.txt"
  exit -1
endif  

set my_firstversion = "$1"
echo "my_firstversion=$my_firstversion"

if ( "$2" == "" ) then
  echo "No 2nd file passed, calculating previous version of $my_firstversion"
  set my_secondversion = $my_firstversion@@`cleartool descr -pred -short $my_firstversion`
else
  echo "Setting 2nd file to $2"
  set my_secondversion = "$2"
endif
echo "my_secondversion=$my_secondversion"

${my_difftool} ${my_firstversion} ${my_secondversion} &

KDiff3 ha costruito in integrazione. Aprire lo strumento - andare su Impostazioni -> Configura -> Integrazione e fare clic sul 'integrarsi con ClearCase' pulsante. Questo strumento ha un eccellente supporto 3 vie diff, maniglie UTF-8 e con questa integrazione automatizzata non devi preoccuparti di tipi di elementi, ecc nel file di mappa.

Ecco un link per la documentazione di IBM su come cambiare lo strumento diff XML ClearCase:

Modifica del XML Diff / Unisci Type Manager

http://www-01.ibm.com /support/docview.wss?rs=984&uid=swg21256807

Si potrebbe provare a utilizzare questo trucco :

  1. Crea un file vuoto

    % touch empty

  2. Recuperare per la versione A

    % cleartool diff -ser empty File@@/main/28 > A

  3. Recuperare per la versione B

    % cleartool diff -ser empty File@@/main/29 > B

  4. Diff e profitto!

    % your-diff-here A B

Mettere in uno script e rendere disponibili le opzioni un po 'più flessibile e il gioco è fatto.

Se si vuole si potrebbe facilmente tagliare il CRUD cleartool diff via con un po 'di awk o cut o perl o il vostro veleno della scelta.

Hooray for ClearCase!

ho installato "WinMerge" (uno strumento diff libero) ed esso stesso installato come strumento ClearCase diff. Io non sono sicuro di come ha fatto.

WinMerge come accennato rileva automaticamente l'installazione di ClearCase e modifica i file di mappa in Clearcase percorso di installazione.

Ho sperimentato problemi sono stati ClearCase si aprirà proprio diff strumento, invece, perché il WinMerge installazione non cambiare tutti i necessari elementi di riga.Quindi è una buona idea di leggere la documentazione per ClearCase così si può risolvere il problema manualmente, se necessario.

Per me questo funziona bene:

%vimdiff my_file.c my_file.c@@/main/LATEST

Io di solito procedere in questo modo.

Per un diff unificato cleartool diff -pred <my file>

Per un diff grafica cleartool diff -pred -g <my file>

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