Je sais que je peux svn diff -r a:b repo
pour afficher les modifications entre les deux révisions spécifiées. Ce que j'aimerais, c'est un diff pour chaque révision qui modifie le fichier. Une telle commande est-elle disponible?
Il n'y a pas de commande intégrée pour cela, donc je fais habituellement juste quelque chose comme ça
#!/bin/bash
# history_of_file
#
# 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.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Ensuite, vous pouvez l'appeler avec:
history_of_file $1
Légèrement différent de ce que vous avez décrit, mais je pense que c'est peut-être ce dont vous avez réellement besoin:
svn blame filename
Il imprimera le fichier avec chaque ligne précédée de l'heure et de l'auteur du commit qui l'a modifié en dernier.
Si vous voulez voir l'historique complet d'un fichier avec des modifications de code:
svn log --diff [path_to_file] > log.txt
Vous pouvez utiliser git-svn
pour importer le référentiel dans un référentiel Git, puis utiliser git log -p filename
. Ceci affiche chaque entrée du journal du fichier suivi du diff correspondant.
Commencer avec
svn log -q file | grep '^r' | cut -f1 -d' '
Cela vous donnera une liste de révisions où le fichier a changé, que vous pourrez ensuite utiliser pour écrire des appels répétés à svn diff
.
La commande "blame", bizarrement nommée, fait cela. Si vous utilisez Tortoise, une boîte de dialogue "depuis la révision" s'affiche, 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 sur les informations de révision, vous pouvez afficher une boîte de dialogue "Afficher le journal" qui fournit des informations d’archivage complètes, ainsi que d’autres fichiers faisant partie de l’archivage.
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 générer toutes les différences. Une approche plus simple consisterait à utiliser un client svn à interface graphique, le cas échéant. Beaucoup d'entre eux, tels que le plugin subversif pour Eclipse, listeront l'historique d'un fichier et vous permettront de voir le diff de chaque révision.
Merci Bendin. J'aime beaucoup votre solution.
Je l'ai modifié pour fonctionner dans l'ordre inverse, en affichant d'abord les modifications les plus récentes. Ce qui est important avec un code de longue date, maintenu sur plusieurs années. Je l'utilise généralement en plus.
svnhistory elements.py |more
J'ai ajouté -r à la sorte. J'ai enlevé spec. traitement pour 'premier enregistrement'. C’est parce que la dernière entrée est erronée, car il n’ya rien qui la différencie. Bien que je vis avec cela parce que je ne descends jamais aussi loin.
#!/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
J'ai vu un tas de réponses partielles lors de mes recherches sur ce sujet. C'est ce qui a fonctionné pour moi et j'espère que cela aidera les autres. Cette commande affichera le résultat sur la ligne de commande, indiquant 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 grep pour ce que vous cherchez.