178 votes

Comment puis-je visualiser l'historique des modifications apportées à un fichier dans le SVN ?

Je sais que je peux svn diff -r a:b repo pour voir les changements entre les deux révisions spécifiées. Ce que j'aimerais, c'est un diff pour chaque révision qui a modifié le fichier. Une telle commande est-elle disponible ?

16 votes

Il est caché dans la commande étrangement nommée "blame".

6 votes

Je pensais que @goosemanjack plaisantait, jusqu'à ce que je l'essaie.

8voto

goosemanjack Points 339

La commande bizarrement nommée "blame" fait cela. Si vous utilisez Tortoise, il vous donne une boîte de dialogue "from revision", puis une liste de fichiers avec un indicateur ligne par ligne du numéro de révision et de l'auteur à côté.

Si vous cliquez avec le bouton droit de la souris sur les informations de révision, vous pouvez faire apparaître une boîte de dialogue "Afficher le journal" qui fournit des informations complètes sur la vérification, ainsi que d'autres fichiers qui faisaient partie de la vérification.

1 votes

C'est très utile, mais ce n'est pas ce que l'OP recherchait, à savoir un historique complet du fichier, et pas seulement les contributions historiques du fichier actuel. Cet historique complet est utile pour comprendre pourquoi certains codes ont été supprimés ou modifiés, et à quel moment.

0 votes

Au contraire, le nom est tout à fait approprié. Il vous indique qui blâmer pour un morceau de code particulier (mal fichu/bugué/incompréhensible).

0 votes

Ne serait-il pas bon que le nom évident de la commande soit "crédit" plutôt que "blâme" ? :)

3voto

D-Rock Points 1247

Pour autant que je sache, il n'y a pas de commande svn intégrée pour accomplir cela. Vous auriez besoin d'écrire un script pour exécuter plusieurs commandes afin de construire tous les diffs. Une approche plus simple serait d'utiliser un client GUI svn si c'est une option. Beaucoup d'entre eux, comme le plugin subversif pour Eclipse, listeront l'historique d'un fichier et vous permettront de visualiser le diff de chaque révision.

3voto

dlink Points 41

Merci, Bendin. J'aime beaucoup votre solution.

Je l'ai modifié pour qu'il fonctionne dans l'ordre inverse, montrant les changements les plus récents en premier. Ce qui est important avec du code de longue date, maintenu sur plusieurs années. J'ai l'habitude de le mettre dans plus.

svnhistory elements.py |more

J'ai ajouté -r au tri. J'ai supprimé la gestion des spécifications pour le 'premier enregistrement'. Il y a une erreur sur la dernière entrée, car il n'y a rien pour la différencier. Mais je m'en accommode car je ne vais jamais jusque là.

#!/bin/bash                                                                    

# history_of_file                                                              
#                                                                              
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802          
#   Outputs the full history of a given file as a sequence of                  
#   logentry/diff pairs.  The first revision of the file is emitted as         
#   full text since there's not previous version to compare it to.             
#                                                                              
# Dlink                                                                        
#   Made to work in reverse order                                              

function history_of_file() {
    url=$1 # current url of file                                               
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
        while read r
    do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
    done
    }
}

history_of_file $1

1voto

alamba Points 107

J'ai vu un tas de réponses partielles en faisant des recherches sur ce sujet. Voici ce qui a fonctionné pour moi et j'espère que cela aidera les autres. Cette commande affiche la sortie sur la ligne de commande, montrant le numéro de révision, l'auteur, l'horodatage de la révision et les modifications apportées :

svn blame -v <filename>

Pour faciliter votre recherche, vous pouvez écrire la sortie dans un fichier et y rechercher ce que vous cherchez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X