165 votes

Comment afficher les commits d'un utilisateur spécifique dans le journal svn ?

Comment afficher les commits d'un utilisateur spécifique dans svn ? Je n'ai pas trouvé d'interrupteur pour cela dans le journal svn.

10 votes

Utilisez --search avec le client Subversion 1.8 ou plus récent.

262voto

yvoyer Points 4028

Vous pourriez utiliser ceci :

svn log | sed -n '/USERNAME/,/-----$/ p' 

Il vous montrera tous les commit effectués par l'utilisateur spécifié (USERNAME).

UPDATE

Comme suggéré par @bahrep, subversion 1.8 est accompagné d'un --search option.

6 votes

Cette solution est parfaite. J'aimerais comprendre ce qu'elle fait, mais je n'ai rien trouvé dans la documentation de sed qui l'explique. Quelqu'un a-t-il des informations sur la raison pour laquelle cela fonctionne ?

1 votes

+1 Ça marche pour moi aussi. Comme vi, sur les distros Unix/Linux, sed est peut-être plus omniprésent que Python - et il n'est donc pas nécessaire de se soucier de son installation.

1 votes

P.S. vous devez exécuter cette opération dans un dossier qui contient votre working copy du référentiel (c'est-à-dire celui que vous avez obtenu à partir de checkout )

105voto

Michael Butler Points 1872

Avec Subversion 1.8 ou plus :

svn log --search johnsmith77 -l 50

En plus des correspondances d'auteurs, cela va également faire apparaître les commits SVN qui contiennent ce nom d'utilisateur dans le message de commit, ce qui ne devrait pas arriver si votre nom d'utilisateur n'est pas un mot courant.

El -l 50 limitera la recherche aux 50 dernières entrées.

--search ARG

Filtre les messages du journal pour afficher uniquement ceux qui correspondent au modèle de recherche ARG.

Les messages du journal ne sont affichés que si le modèle de recherche fourni correspond à l'un des éléments suivants : auteur, date, texte du message du journal (sauf si --quiet est utilisé), ou, si l'option --verbose est également fournie, un chemin modifié.

Si plusieurs --search sont fournies, un message de journal est affiché s'il correspond à l'un des modèles de recherche fournis.

Si --limit est utilisé, il limite le nombre de messages de journal recherchés, plutôt que de restreindre la sortie à un nombre particulier de messages de journal correspondants.

http://svnbook.red-bean.com/en/1.8/svn.ref.svn.html#svn.ref.svn.sw.search

1 votes

@Izkata ajouté dans le SVN 1.8 : svnbook.red-bean.com/fr/1.8/svn.ref.svn.c.log.html

0 votes

Si vous voulez rechercher plus d'un auteur, svn log --search foo --search bar -l 30 . If multiple --search options are provided, a log message is shown if it matches any of the provided search patterns.

0 votes

Cette solution peut aussi être utilisée avec l'argument --diff (pour montrer le code modifié).

17voto

Avi Points 14468

Svn ne dispose pas d'options intégrées pour cela. Il dispose d'une svn log --xml pour vous permettre d'analyser la sortie vous-même et d'obtenir les parties intéressantes.

Vous pouvez écrire un script pour l'analyser, par exemple, en Python 2.6 :

import sys
from xml.etree.ElementTree import iterparse, dump

author = sys.argv[1]
iparse = iterparse(sys.stdin, ['start', 'end'])

for event, elem in iparse:
    if event == 'start' and elem.tag == 'log':
        logNode = elem
        break

logentries = (elem for event, elem in iparse
                   if event == 'end' and elem.tag == 'logentry')

for logentry in logentries:
    if logentry.find('author').text == author:
        dump(logentry)
    logNode.remove(logentry)

Si vous enregistrez le fichier ci-dessus sous le nom de svnLogStripByAuthor.py, vous pouvez l'appeler comme suit :

svn log --xml other-options | svnLogStripByAuthor.py user

0 votes

C'est pourquoi j'ai aussi ajouté la balise "bash".

0 votes

Vous pourriez écrire un utilitaire script pour le parser - voir mon exemple

0 votes

Je n'ai pas installé python, mais bien que mon problème soit résolu d'une manière sans rapport, je suppose que votre solution fonctionne, merci !

13voto

user2197169 Points 91

Puisque tout le monde semble pencher vers linux (et autres) : voici l'équivalent Windows :

svn log [SVNPath]|find "USERNAME"

0 votes

Merci ! Un client utilise Windows, ce qui m'a beaucoup aidé. Il s'agit d'un système géré, je n'ai pas les droits d'administrateur et je ne peux pas installer cygwin/perl/quelque chose...

8voto

marcog Points 39356
svn log | grep user

fonctionne pour la plupart.

Ou pour être plus précis :

svn log | egrep 'r[0-9]+ \| user \|'

0 votes

Merci, mais je ne peux pas voir les messages de validation de cette façon.

0 votes

@mimrock Vrai. Vous pourriez grep's -A pour afficher le contexte, mais ce nombre est statique alors que le message de validation est de longueur variable. Vous pourriez faire une solution avec sed ou similaire, mais c'est un effort :P

0 votes

Cela fonctionne également sous Windows, si vous installez les extensions GIT ( code.google.com/p/gitextensions ) et lancez une invite de commande GIT Bash.

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