Je sais que je peux svn diff -r a:b repo
voir les changements entre les deux révisions spécifiées. Ce que je voudrais, c'est un diff pour chaque révision qui a changé le fichier. Une telle commande est-elle disponible?
Je sais que je peux svn diff -r a:b repo
voir les changements entre les deux révisions spécifiées. Ce que je voudrais, c'est un diff pour chaque révision qui a changé le fichier. Une telle commande est-elle disponible?
Réponses:
Il n'y a pas de commande intégrée pour cela, donc je fais généralement quelque chose comme ceci:
#!/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
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
fonctionne exactement comme ça! stackoverflow.com/a/24938573/3185510
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éfixée par l'heure et l'auteur du commit qui l'a modifié en dernier.
Si vous souhaitez voir l'historique complet d'un fichier avec des modifications de code:
svn log --diff [path_to_file] > log.txt
--diff
car il a des tests pour l'option alors que 1.7.3 n'en a aucun - subversion/tests/cmdline/log_tests.py
.
--limit <number>
option. Comme ça:svn log --diff --limit 5 [path_to_file]
Vous pouvez utiliser git-svn
pour importer le référentiel dans un référentiel Git, puis utiliser git log -p filename
. Cela montre chaque entrée de journal pour le fichier suivie du diff correspondant.
git log X..Y -o filename
Commencer avec
svn log -q file | grep '^r' | cut -f1 -d' '
Cela vous donnera une liste des révisions où le fichier a changé, que vous pouvez ensuite utiliser pour scripter des appels répétés svn diff
.
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
joli petit one-liner (awk fait la même chose que cut)
La commande "blame" étrangement nommée le fait. Si vous utilisez Tortoise, il vous donne une boîte de dialogue "à partir de la révision", 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 donne des informations complètes sur l'archivage, ainsi que d'autres fichiers qui faisaient 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 pour construire tous les diffs. Une approche plus simple serait d'utiliser un client svn GUI 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.
Merci, Bendin. J'aime beaucoup votre solution.
Je l'ai changé pour qu'il fonctionne dans l'ordre inverse, en montrant les changements les plus récents en premier. Ce qui est important avec un code de longue date, maintenu sur plusieurs années. Je le transforme généralement en plus.
svnhistory elements.py |more
J'ai ajouté -r au tri. J'ai supprimé les spécifications. traitement pour «premier enregistrement». C'est une erreur sur la dernière entrée, car il n'y a rien pour le comparer. Même si je vis avec 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 la sortie 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 ce que vous recherchez.