diff - instalar - https tag manager
¿Alguna forma de usar una herramienta de diferencia personalizada con cleartool/clearcase? (11)
Me gustaría usar mi propio diff cuando trabaje en una vista de instantánea de clearcase.
Por lo que puedo ver, no hay forma de especificar una herramienta diff al ejecutar " cleartool diff
", así que estaba pensando que podría ejecutar algo como " mydiff <predecessor file> <modified file in my view>
", pero no No sé lo suficiente sobre ClearCase para poder encontrar el "archivo predecesor" para diferir.
Alguna forma de hacer esto?
Olvidé mencionar (hasta ahora, después de leer las dos primeras respuestas relacionadas con Windows) que esto está en Unix, y no tengo permitido usar la configuración de ClearCase.
Instalé "WinMerge" (una herramienta libre de diferencias) y se instaló como la herramienta clearcase diff. No estoy seguro de cómo hizo eso.
Otra opción es usar Git + ClearCase (o ver esto o esto ) y simplemente diferir con Git.
Esto es notablemente fácil de configurar y, en mi experiencia, en realidad le duele menos a su cerebro usar dos sistemas VCS a la vez que tratar de vencer a CC como una herramienta del siglo XXI.
Solo piensa en Git como un puente entre CC y diff :-)
Tengo otra forma de trabajar basada en las sugerencias aquí. Descubrí el comando "get" de cleartool, así que lo ejecuto para obtener la versión anterior en un archivo temporal:
cleartool get -to fname.temp fname @@ predecesor
Luego ejecute mi diff y elimine ese archivo.
Gracias por todas las sugerencias.
WinMerge como se menciona automáticamente detecta una instalación de ClearCase y modifica el archivo de mapa en la ruta de instalación de Clearcase.
He tenido problemas cuando ClearCase abrirá su propia herramienta de diferencias porque la instalación de WinMerge no modificó todas las líneas de pedido necesarias. Por lo tanto, es una buena idea leer la documentación de ClearCase para que pueda corregirla manualmente si es necesario.
Aquí hay un enlace a los documentos de IBM sobre cómo cambiar la herramienta ClearCase XML diff:
Cambiar el administrador de tipo Diff / Merge de XML
http://www-01.ibm.com/support/docview.wss?rs=984&uid=swg21256807
Para mí, esto funciona muy bien:
%vimdiff my_file.c my_file.c@@/main/LATEST
Cómo cambiar las herramientas de diferencia predeterminadas
Puede especificar una herramienta de diferencias externa modificando el mapa de archivos , en "c: / archivos de programa / rational / ClearCase / lib / mgrs"
El WinMerge sugerido por Paul realmente modifica ese archivo.
Cada línea de mapa tiene 3 partes: el tipo de archivo CC, la acción CC y la aplicación.
Busque la sección en el archivo de mapa para los tipos de archivo text_file_delta. Allí encontrará líneas para comparar acciones CC, xcompare, fusionar y xmerge que se ven así:
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
Puede reemplazarlos por el ejecutable de su opción de herramienta diff .
O bien, un script diff simple
Si desea ir a la línea de comando completa en esto (que me gusta ;-)), un poco de ccperl puede ayudar:
#!/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";
Advertencia: la ruta de acceso extendida ( @@/...
) solo es accesible en la vista dinámica ( M:/...
, no en la vista de instantáneas ( c:/...
).
La secuencia de comandos no tiene nada que ver con el archivo de map
presentado anteriormente:
- ese archivo define ''Type Merge Managers''.
- Esta secuencia de comandos le permite ejecutar cualquier administrador de combinación en cualquier archivo que desee, sin leer ningún archivo de mapa para buscar el archivo diff adecuado para usar para un archivo determinado.
Aquí, le proporciona al script ambas informaciones: el archivo (como parámetro) y el exe de diff para ejecutar (dentro de la implementación del script: reemplace mydiff
por el exe de cualquier diff que desee).
O mejor script de diff (también funciona en vistas estáticas / de instantáneas)
Aquí hay una versión de este script que funciona tanto para instantáneas como para vistas dinámicas.
Para la vista de instantánea, uso la sugerencia de cleartool get
: cleartool get
.
De nuevo, puede reemplazar el comando diff
incluido en este script por la herramienta que elija.
#!/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";
¡Parece que alguien ya lo pensó en snip2code!
Aquí un script tcsh bash que hace exactamente lo que quieres.
Custom-diff-tool-for-clearcase-object
Como puede ver, el siguiente es el código clave para obtener la versión anterior de un archivo dado:
cleartool descr -pred -short $1
Donde $1
es el nombre del archivo para comparar.
#!/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 incorporado integración. Abra la herramienta - vaya a Configuración -> Configurar -> Integración y haga clic en el botón "Integrar con ClearCase". Esta herramienta tiene un excelente soporte de diff de 3 vías, maneja UTF-8 y con esta integración automatizada no tiene que preocuparse por los tipos de elementos, etc. en el archivo del mapa.
Por lo general, procedo de esta manera.
Para un diff de cleartool diff -pred <my file>
unificado diff cleartool diff -pred <my file>
Para un gráfico diff cleartool diff -pred -g <my file>
Podría intentar usar este truco :
Crea un archivo vacío
% touch empty
Recuperar para la versión A
% cleartool diff -ser empty File@@/main/28 > A
Recuperar para la versión B
% cleartool diff -ser empty File@@/main/29 > B
Difícil y ganancia!
% your-diff-here AB
Ponlo en un script y haz que las opciones sean un poco más flexibles y ahí lo tienes.
Si lo desea, puede cortar fácilmente el cleartool diff crud off con un poco de awk
o cut
o perl
o su veneno de elección.
¡Hurra por ClearCase!