2008-10-07 17 views
15

En una vista estática, ¿cómo puedo ver una versión anterior de un archivo?En ClearCase, ¿cómo puedo ver la versión anterior de un archivo en una vista estática, desde la línea de comandos?

Dado un archivo vacío (llamado empty en este ejemplo) puedo subvertir diff que me mostrara la versión antigua:

 
    % cleartool diff -ser empty [email protected]@/main/28 

Esto se siente como un corte muy feo. ¿Me he perdido un comando más básico? ¿Hay una manera más ordenada de hacer esto?

(no quiero editar el especificación de configuración - que es bastante tedioso, y yo estoy tratando de mirar un montón de versiones antiguas.)

Aclaración: Quiero enviar la versión de el archivo para stdout, así que puedo usarlo con el resto de Unix (grep, sed, etc.). Si encontró esta pregunta porque está buscando una forma de guardar una versión de un elemento en un archivo, consulte Brian's answer.

+0

título debería dejar en claro que está hablando de CC – shoosh

Respuesta

13

I'm trying to look at a bunch of old versions

No estoy seguro de si se está hablando de "un montón de versiones antiguas" de un archivo , "un montón de versiones antiguas" de varios archivos.

Para visualizar varias versiones antiguas de un archivo, la media simple es para mostrar su árbol de versiones (ct lsvtree -graph File), y luego seleccione una versión, haga clic en él y 'Send To' un editor que acepta varios archivos (como Notepad ++) En unos pocos clics, tendrá una vista de esas versiones antiguas.
Nota: debes tener CC6.0 o 7.0.1 IFix01 (7.0.0 y 7.0.1 dejar de 'enviado a' un archivo con el siguiente mensaje de error "Access to unnamed file was denied")

Pero para visualizar varias versiones antiguas de diferentes archivos, recomendaría una vista dinámica y editando la especificación de configuración de esa vista (y no la vista de instantánea con la que está trabajando actualmente), para seleccionar rápidamente todos esos archivos antiguos (con suerte mediante una simple regla de selección como 'element * aLabel ')


[De los comentarios:]

what's the idiomatic way to "cat" an earlier revision of a file?

La forma idiomática es mediante una vista dinámica (que configura con la misma especificación de configuración que su vista de instantánea existente).

A continuación, puede examinar (como en 'cambiar el directorio a') las diversas rutas extendidas de un archivo.

Si desea gato todas las versiones de una rama de un archivo, que vaya en:

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

'1', '2', ... 'x', siendo la versión 1, 2, ... x de su archivo dentro de esa rama.


Para obtener una vista instantánea , la trayectoria extendida no es accesible, por lo que su "Hack" es el camino a seguir.

Sin embargo, 2 comentarios aquí:

  • para mostrar rápidamente todas las revisiones anteriores de un archivo de instantánea en una rama determinada, puede escribir:

(una versión de línea de copiar y pegar, sintaxis Unix :)

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

(versión de varias líneas para facilitar la lectura :)

 
cleartool find addon.xml -ver 'brtype(aBranch) && 
           !version(.../aBranch/LATEST) && 
           ! version(.../aBranch/0)' 
      -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"' 
  • puede tener rápidamente una salida un poco más agradable con

(una versión de línea de copiar y pegar, la sintaxis Unix :)

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

(versión de varias líneas para facilitar la lectura:)

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

De esta forma, la salida es más agradable.


La salida estándar "cleartool get" command (man page)mentioned below por Brian no lo haga:

The get command copies only file elements into a view.

On a UNIX or Linux system, copy /dev/hello_world/foo[email protected]@/main/2 into the current directory.

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

On a Windows system, copy \dev\hello_world\[email protected]@\main\2 into the C:\build directory.

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

Así que tal vez que, canalizando el resultado a un cat (o type en las ventanas), entonces puede hacer algo con la salida de dicho cat (type) comando.

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

Gracias, pero necesito hacerlo en la línea de comandos (el host es Unix y la GUI X no se puede usar en nuestro enlace lento de red). Por "un montón de versiones antiguas", intento ver qué ha cambiado a través de varias revisiones, por lo que hay una serie de archivos y una serie de revisiones. –

+0

... y editar la especificación de configuración parece ser el camino más largo (cuando tengo una línea). Creo que lo que estoy preguntando es: ¿cuál es la forma idiomática de "cat" una revisión anterior de un archivo? –

+0

Acabo de actualizar mi respuesta. Compruébalo y deja un comentario si todavía no es lo suficientemente bueno. – VonC

2

[Reescrito basado en el primer comentario]

Todos los archivos de Clearcase, incluidas las versiones, están disponibles en la estructura de directorio virtual. No tengo mucha familiaridad con las vistas estáticas, pero creo que todavía atraviesan un fs virtual; simplemente se actualizan de manera diferente.

En ese caso, sólo se puede hacer:

cat [email protected]@/main/28 

Se puede poner feo si también tiene que encontrar la versión correcta de un directorio que contiene ese elemento de archivos. Tenemos un script PERL en funcionamiento que utiliza este enfoque para analizar los cambios históricos realizados en los archivos, y rápidamente nos quedamos sin espacio de línea de comandos en Windows para ejecutar realmente los comandos.

+0

No quiero diferir entre las versiones, solo quiero ver una versión anterior (no necesariamente el predecesor inmediato). Solo uso diff porque es el único comando que conozco para ver una versión completa. Lo que realmente quiero es algo como "gato de cleartool" (que no existe AFAICT.) –

+0

Gracias Chris. La estructura de directorio virtual no existe en vistas estáticas (AFAICT). Supongo que la respuesta es: no hay una manera más clara de hacerlo en una vista estática en una sola línea ... Una bonita historia sobre el guión Perl, parece que la mayoría de las tiendas ClearCase tienen un montón de "guiones de soporte" esenciales :) –

+0

@Matt está en lo cierto, la ruta extendida no se puede acceder directamente desde una vista de instantánea. Sin embargo, he actualizado mi respuesta para tener una salida más clara de las versiones de archivos anteriores, desde una vista de instantánea. – VonC

-1

cáscara ct gato del archivo @@ versión

+0

Eso no parece funcionar, me sale este error: cat: File @@/main/28: No existe tal archivo o directorio –

1

Si el archivo es un elemento Clearcase y cat File obras, y la vista está configurado correctamente, a continuación, tratar:

cat [email protected]@/main/28 

(nota: sin el ct shell - no debería necesitar esto si ya está en la vista.)

Pruebe a escribir:

ct ls -l File 

Si muestra el archivo con un nombre extendido similar al anterior, entonces debería poder cat el archivo con un nombre extendido.

+1

No es correcto en una vista estática (se dice algunas veces en la pregunta). –

12

Sé que esto es un hilo viejo ... pero no podía dejar que esto vaya paliza por no resueltos ....

vistas estáticas tienen un "ct" command que hace exactamente lo que busca .

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

guardará esta versión del archivo en ~/foo.

+0

¡Ah! Perfecto. No tengo idea de cómo me olvidé de esto (alucinar mi cerebro, ¿estaba en ClearCase 6?). No importa, ¡responde ACEPTABLE! Gracias Brian. He editado ligeramente tu respuesta con un uso de muestra. –

+0

En realidad, lo siento Brian, no he aceptado tu respuesta y se la devolví a VonC. Desafortunadamente, si bien le permitirá * guardar * la versión del elemento en un archivo, simplemente obtener el contenido del archivo es complicado ya que no funciona con stdout ('/ dev/fd/1'); cleartool informa "El nombre de ruta de destino ya existe". –

+0

@Matt: He actualizado mi respuesta anterior;) – VonC

Cuestiones relacionadas