2008-09-11 8 views
46

Existe-t-il un équivalent de la faute de svn pour Perforce sur la ligne de commande? p4 annotate n'affiche pas les noms d'utilisateur - seulement les nombres de changeset (sans histoire d'ancêtre!).Perforce blame

Je dois actuellement suivre le code par le biais des ancêtres et comparer avec le fichier, et il doit juste y avoir un moyen plus facile - peut-être un utilitaire F/OSS?

+2

Ceci est une caractéristique essentielle. Git et Subversion peuvent le faire.Fait une demande de fonctionnalité à Perforce devs http://www.p4ideax.com/ideas/11922/add-a-command-p4-blame-similar-to-git-blame –

Répondre

10

Essayez de jeter un oeil à quelques outils que je pense pourrait vous obtenir plus de ce que vous avez besoin:

1) p4pr script Perl par Bob Sidebotham et Jonathan Kamens.

2) Emacs Perforce L'interface a une commande 'p4-print-with-rev-history' (liée à `C-x p V ').

54

Je ne suis pas trop familier avec la commande blame, mais je suppose que vous cherchez qui change une ligne de code particulière. La manière la plus simple est d'utiliser la «vue time-lapse» de Perforce disponible à la fois sur p4win et sur p4v.

Cet outil utilise annotate et d'autres commandes pour vous donner une vue de la ligne de code dans le temps. Vous pouvez voir qui a modifié quel code, quand il a été inséré ou retiré de la ligne de code, etc.

Ce n'est pas une ligne de commande. J'ai vérifié brièvement dans l'aide et il ne semble pas être un moyen de lancer la vue time-lapse directement à partir d'une invocation de p4win ou p4v. Il pourrait y avoir bien ... Je vais vérifier plus loin ...

Edit: J'ai vérifié avec le soutien, et vous pouvez lancer la vue timelapse par P4V comme suit:

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

HTH.

+0

Je suis d'accord que la vue TimeLapse fait le travail dans montrant exactement qui change quelle ligne. Utilisez tout le temps. –

+0

Comment lancez-vous la vue time lapse dans p4win? – cdleary

+2

Même si vous utilisez P4Win, vous devez installer P4V pour avoir accès à la fonctionnalité de laps de temps. Une fois que vous faites cela, "Time-lapse View ..." apparaîtra sur le menu contextuel du fichier. – raven

1

@ alanw123: p4pr est proche de ce que je cherche, mais il ne les frontières de la branche: non croisées

last if $type eq 'branch'; 

C'était le principal problème que j'avais quand j'essayé d'écrire mon propre utilitaire - vous ne pouvez pas (facilement) dire comment les lignes correspondent au fichier qui a été ramifié.

+1

Voir le message "[Nouvelle version de p4pr.perl qui retrace les branchements passés] (http://maillist.perforce.com/pipermail/perforce-user/2000-May/004151.html)". J'ai changé la réponse d'Alan pour utiliser cette version puisque son lien est maintenant cassé. – idbrii

3

À partir du client P4V, vous pouvez obtenir le menu contextuel « Afficher Time-lapse » sur toute la vue fichier qui affiche comme les fichiers, Changelist etc.

La vue laps de temps a tout à fait quelques options comme seule révision, plusieurs Révision pour analyser ce qui a changé, quand et par qui.

1

La commande p4 annotate fait peut suivre Fusionne/intégrations et de branchement sur la ligne de commande avec les commandes -I et -i (mais il ne peut pas faire les deux à la fois :():

-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

Notez que '-I' suit aussi les branches, mais il le fait par un algorithme différent (' -i' crée un historique linéarisé suivant les branches et fait une annotation normale là-dessus alors que '-I' suit tout l'arbre "à travers de nombreuses variantes). Les drapeaux sont mutuellement exclusifs parce que les deux approches ne sont pas compatibles et donneront des résultats différents. –

4

J'utilise un petit script pour blâmer

#!/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' 

vous pouvez accrocher à certains des éditeurs qui passent le nom du fichier et de la ligne.

Il existe une version un peu plus complexe: here.

Questions connexes