2008-09-11 20 views
46

¿Hay un equivalente de culpa de svn para Perforce en la línea de comando? p4 annotate no muestra nombres de usuario, solo números de conjunto de cambios (¡sin historial de antepasados!).Perforce culpa

Actualmente, tengo que rastrear el código a través de antepasados ​​y compararlo con el registro de archivos, y simplemente tiene que haber una manera más fácil, ¿tal vez una utilidad F/OSS?

+2

Esta es una característica vital. Git y Subversion pueden hacerlo.Realicé una solicitud de función para desarrolladores Perforce http://www.p4ideax.com/ideas/11922/add-a-command-p4-blame-similar-to-git-blame –

Respuesta

10

trate de tomar un vistazo a un par de herramientas que creo que podría conseguir que la mayor parte de lo que necesita:

1) p4pr Perl guión de Bob Sidebotham y Jonathan Kamens.

2) Emacs Perforce interfaz tiene un comando 'p4-print-with-rev-history' (vinculado a `C-x p V ').

54

No estoy demasiado familiarizado con el comando de culpa, pero supongo que está buscando quién cambia una determinada línea de código. La manera más fácil es usar la "vista de lapso de tiempo" de Perforce disponible tanto desde p4win como desde p4v.

Esta herramienta utiliza la anotación y algunos otros comandos para darle una vista de la línea de código a lo largo del tiempo. Puede ver quién modificó qué código, cuándo fue insertado o eliminado de la línea de código, etc.

Sin embargo, no es una línea de comandos. Revisé brevemente la ayuda y no parece haber una manera de iniciar la vista de lapso de tiempo directamente desde una invocación p4win o p4v. Puede haber sin embargo ... Voy a estar revisando más ...

Editar: he comprobado con el apoyo, y se puede poner en marcha la vista timelapse través P4V de la siguiente manera:

p4v.exe -cmd "annotate //<path/to/file>" 

HTH.

+0

Estoy de acuerdo en que la vista TimeLapse hace el trabajo en mostrando exactamente quién cambia qué línea. Úsalo todo el tiempo. –

+0

¿Cómo se inicia la vista de lapso de tiempo en p4win? – cdleary

+2

Incluso si usa P4Win, debe instalar P4V para tener acceso a la funcionalidad de lapso de tiempo. Una vez que lo haga, aparecerá "Time-lapse View ..." en el menú contextual del archivo. – raven

1

@ alanw123: p4pr está cerca de lo que estoy buscando, pero tiene límites rama no cruzados:

last if $type eq 'branch'; 

Ese fue el principal problema que tuve cuando traté de escribir mi propia utilidad - no se puede (fácilmente) decir cómo las líneas se vuelven a asignar al archivo del que se ramificó.

+1

Ver la publicación "[Nueva versión de p4pr.perl que rastrea las ramificaciones pasadas] (http://maillist.perforce.com/pipermail/perforce-user/2000-May/004151.html)". Cambié la respuesta de Alan para usar esa versión ya que su enlace ahora está roto. – idbrii

3

Desde el cliente P4V, puede obtener "Time-lapse Ver" menú contextual de todos los archivos que muestra la vista como archivos, etc. Lista de cambios

El tiempo transcurrido vista tiene bastantes opciones como la revisión individual, múltiple Revisión para analizar qué se cambió, cuándo y por quién.

1

El comando p4 annotate realidad puede siga Fusiones/integraciones y la ramificación de la línea de comandos con los comandos -I y -i (pero no puede hacer ambas cosas a la vez :():

-I 
Follow integrations into the file. If a line was introduced into the file by a merge, the source of the merge is indicated as the changelist that introduced the line. If that source was itself the result of an integration, that source will be used instead, and so on. 
The use of the -I option implies the -c option. The -I option cannot be combined with -i. 
-i 
Follow file history across branches. If a file was created by branching, Perforce includes revisions up to the branch point. 
The use of the -i option implies the -c option. The -i option cannot be combined with -I. 
+1

Tenga en cuenta que '-I' también sigue ramas, pero lo hace por un algoritmo diferente (' -i' crea una historia linealizada siguiendo registros de ramificación y hace una anotación normal sobre eso mientras '-I' sigue al árbol completo "a través de muchas variantes). Los indicadores son mutuamente excluyentes porque los dos enfoques no son compatibles y arrojarán resultados diferentes. –

4

utilizo una pequeña guión para culpar

#!/bin/bash 

FILE="$1" 
LINE="$2" 

p4 annotate -cq "${FILE}" | sed "${LINE}q;d" | cut -f1 -d: | xargs p4 describe -s | sed -e '/Affected files/,$d' 

puede conectarlo a algunos de los editores que pasarán el nombre del archivo y la línea.

Hay una versión un poco más compleja here.