C'è un modo per trovare una revisione SVN cercando una stringa di testo che è stata rimossa nel file? Conosco il testo esatto da cercare e il file da cercare, ma ci sono centinaia di revisioni.Trova revisione svn rimossa dal testo
risposta
Sulla sceneggiatura di khmarbaise, sono arrivato fino a questo:
#!/bin/bash
file="$1"
REVISIONS=`svn log $file -q --stop-on-copy |grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
prevRev=$(($rev-1))
difftext=`svn diff [email protected]$prevRev [email protected]$rev | tr -s " " | grep -v " -\ \- " | grep -e "$2"`
if [ -n "$difftext" ]; then
echo "$rev: $difftext"
fi
done
passare il nome del file e la stringa di ricerca nella linea di comando:
xyz.sh "filename" "text to search"
svn diff mi dà sia il rev dove è aggiunto e dove è cancellato; Lascerò qui nel caso sia utile a chiunque. C'è un messaggio di errore nell'ultima revisione di cui non so come sbarazzarmi (ho ancora molto da imparare :)) ma i numeri di giri sono corretti.
Questo ha funzionato bene per me, grazie! –
Questo script funziona magnificamente anche per stringa/testo che viene aggiunto perché funziona su svn diff. Grazie per la sceneggiatura. –
In 'grep"^r "| cut -d "r" -f2 | cut -d "" -f1' stai usando tre processi; Vorrei usare qualcosa come "sed -ne"/^ r/{s/^ r //; S/ .*//; p} "invece. – musiphil
solo un piccolo script bash che filtra le linee modificate ... Se si cambia pom.xml nel proprio file, con l'URL supplementare si ha ciò di cui si ha bisogno ... (Se si è su un sistema simile a Unix). Metti il seguente in un file di script (xyz.sh) e fai un filtro sull'output.
#!/bin/bash
REVISIONS=`svn log pom.xml -q|grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
svn blame -r$rev:$rev pom.xml | tr -s " " | grep -v " -\ \- "
done
xyz.sh | grep "Text you are searching for"
La stampa sarà qualcosa di simile:
256 ......
La 256 è la revisione in cui era stata fatta la modifica.
Questo non stampa le righe cancellate, vero? – musiphil
@musiphil corretto. – khmarbaise
mi piace blameall.py.
uscita di esso per un file contiene tutte le linee esistenti e cancellate in modo che possa vedere le linee eliminati nel contesto circostante.
fatto una semplice versione di PHP della risposta accettata da eseguire sulla riga di comando:
<?php
$file = $argv[1];
$searchfor = $argv[2];
if (!$file) die('Please specify file name to search through as the first argument.');
if (!$searchfor) die('Please specify text to search for as the second argument.');
echo PHP_EOL .'Searching '. $file .' for: '. $searchfor . PHP_EOL . PHP_EOL;
$cmd = 'svn log '. $file .' -q';
$output = array();
exec($cmd, $output);
// Find all revisions
$all_revisions = array();
foreach ($output as $line) {
if (preg_match("/^r(\\d+) /", $line, $match)) {
$all_revisions[] = $match[1];
}
}
echo 'Checking '. count($all_revisions) .' revisions...'. PHP_EOL . PHP_EOL;
// Get diff for each revision
foreach ($all_revisions as $keykey => $rev) {
$prev_rev = $all_revisions[$keykey+1];
$cmd = 'svn diff --old='. $file .'@'. $prev_rev .' --new='. $file .'@'. $rev;
$output = array();
exec($cmd, $output);
// Check if string is present
$str = implode(PHP_EOL, $output);
if (strpos($str, $searchfor) !== false) {
echo 'Found in revision '. $prev_rev .' but removed from '. $rev .'.'. PHP_EOL;
break;
} else {
echo 'Not found in revision '. $rev .'.'. PHP_EOL;
}
}
echo 'Done.'. PHP_EOL;
eseguire lo script lo script con il seguente comando:
php scriptname.php "filetosearchthrough.php" "text to search for"
Lo script potrebbe essere ottimizzato ma fa quello che ti serve. Tieni presente che è necessario molto tempo per cercare tra molte revisioni.
Se non puoi o non vuoi utilizzare gli script:
svn log --diff [path_to_file] > log.txt
(il [path_to_file] è facoltativo, se non si specifica che, includerà tutti i file nella cartella corrente e sottocartelle)
Qui puoi trovare tutte le linee aggiunte (iniziano con +), tutte le linee rimosse (iniziano con -) e alcune linee di contesto (iniziano con uno spazio). Le linee modificate appariranno con il + e ripetute con il -
È possibile elaborare il file risultante con qualsiasi editor di testo decente (ad esempio Notepad ++), grep, script o qualsiasi cosa tu voglia.
- 1. SVN trova la revisione del tag
- 2. svn: changeset = revisione?
- 3. Ottenere l'ultimo numero di revisione in SVN?
- 4. Come saltare una revisione nel repository svn
- 5. svn merge precedente revisione in copia
- 6. bambù per costruire specifico SVN Revisione
- 7. Git-SVN: aggiornamento del repository Git dal server SVN centralizzato
- 8. SVN - Ripristino repository dal backup
- 9. SVN - cancella una revisione, o effettua una revisione precedente la testa
- 10. Posso git svn rebase ad una certa revisione svn? (Simile a svn up -r ...)
- 11. Ottenere la data di una revisione usando svn info
- 12. Numero di revisione SVN e data e ora
- 13. perché la parola chiave overload è stata rimossa dal C++?
- 14. Ottenere automaticamente il numero di revisione SVN in un programma
- 15. Ripristinare una cartella svn ad una precedente revisione
- 16. Come costruire una revisione specifica di SVN a Hudson/Jenkins
- 17. Come impostare un numero di revisione per svn esterno?
- 18. Come visualizzare dinamicamente la revisione SVN sul sito web?
- 19. Includere il numero di revisione SVN nel codice sorgente
- 20. con svn, controlla il numero di revisione quando offline
- 21. Come iniettare il numero di revisione SVN in JAR?
- 22. Impossibile analizzare l'intestazione di revisione diff 'inesistente' in svn tartaruga?
- 23. Trova revisione nel tronco che è stato creato un ramo da
- 24. svn: E160013: file non trovato: revisione 21602, percorso 'XXX' Query registro SVN
- 25. Elimina tutti i file dal repository svn
- 26. Trova QUALSIASI testo senza tag
- 27. Nokogiri trova testo nei paragrafi
- 28. Svn mergeinfo revisioni speciali
- 29. testo sublime- "elenco righe contenenti stringa 'trova'
- 30. Controlla la revisione specifica dal repository Git con JGit
Intendi per le modifiche apportate o per un testo contenuto nel messaggio di registro? È possibile utilizzare l'URL/file di log di svn in modo da ottenere l'elenco delle revisioni in cui questo file è stato modificato. Usando svn blame -rRevision: Revision URL/file stamperà la riga che è stata cambiata nella revisione e un grep (unix) su quello darebbe le informazioni necessarie ... – khmarbaise
Intendevo le modifiche effettive del file, non i messaggi del registro. svn blame + grep era _almost_ abbastanza buono, ma il cambiamento stava cancellando il testo invece di aggiungerlo, quindi non è stato visualizzato lì. Ho aggiornato la domanda con dei chiarimenti; grazie khmarbaise. –
svn blame visualizzerà le righe in entrambi i casi se aggiungi una linea o rimuovi una linea. Se si utilizza il modo in cui ho suggerito nella mia risposta (svn blame -r Rev: Rev URL/file). – khmarbaise