Ich weiß, dass ich svn diff -r a:b repo
die Änderungen zwischen den beiden angegebenen Revisionen anzeigen können. Was ich möchte, ist ein diff für jede Revision, die die Datei geändert hat. Ist ein solcher Befehl verfügbar?Wie kann ich alle historischen Änderungen an einer Datei in SVN
Antwort
Es gibt keinen eingebauten dafür Befehl, so dass ich in der Regel nur so etwas tun:
#!/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 [email protected]
svn cat -r$r [email protected]
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r [email protected]
svn diff -c$r [email protected]
echo
done
}
}
Dann Sie es mit anrufen:
history_of_file $1
Ich habe noch nie zuvor gesehen, dass ich "in den verspannten Block" trickse. Ordentlich. –
[Batch-Dateiversion] (http://stackoverflow.com/questions/5622367/generate-history-of-changes-on-a-file-in-svn/5721533#5721533) dieses Skripts, fwiw. – ladenedge
Ich habe dies meiner .bashrc-Datei hinzugefügt. Wenn ich anfange, bekomme ich 'svn: '. ist keine Arbeitskopie svn: Syntaxfehler in Revisionsargument '@HEAD' svn: Syntaxfehler in Revisionsargument '@ HEAD'' – Francisc0
Sie können git-svn
verwenden, um das Repository in ein Git-Repository zu importieren, und dann git log -p filename
verwenden. Dies zeigt jeden Protokolleintrag für die Datei, gefolgt von dem entsprechenden Diff.
Installieren Sie Git, erstellen Sie ein Git-Repository, verwenden Sie einen Git-Befehl? Die Frage wurde markiert und nach Subversion gefragt. –
Ich benutze git als Subversion-Client mit git-svn. So würde ich die log + diff-Operation gegen ein Subversion-Repository durchführen. Git hat einige wirklich gute Tools für das Anzeigen von Repositories, es ist keine so ausgefallene Idee. –
Über jemand ist (zu Recht) gratuliert, ein nettes Skript zu schreiben - um Funktionalität zur Verfügung zu stellen, die nicht in SVN vorhanden ist. Sehen Sie, dass git lokal ist, wenn Sie nicht drücken, könnten Sie diese Werkzeuge nennen, keine Notwendigkeit, sich über Dinge zu ärgern. –
Soweit ich weiß, gibt es keinen eingebauten Svn-Befehl, um dies zu erreichen. Sie müssten ein Skript schreiben, um mehrere Befehle auszuführen, um alle Diffs zu erstellen. Ein einfacherer Ansatz wäre die Verwendung eines GUI-Svn-Clients, wenn dies eine Option ist. Viele von ihnen, wie das subversive Plugin für Eclipse, listen den Verlauf einer Datei auf und erlauben es Ihnen, den Unterschied jeder Revision zu sehen.
beginnen mit
svn log -q file | grep '^r' | cut -f1 -d' '
, dass Sie eine Liste der Revisionen erhalten, wo die Datei geändert, die Sie dann auf Skript wiederholte Anrufe svn diff
verwenden können.
oder ... mach weiter! '' svn log -q einige_datei.xxx | grep^r | awk '{print $ 1}' | sed -e's/^ r // '| xargs -i svn diff -rHEAD: {} some_file.xxx> ~/file_history.txt'' netter kleiner Einzeiler (awk tut das selbe wie geschnitten) – Kasapo
etwas anders aus, was Sie beschrieben , aber ich denke, das könnte sein, was Sie tatsächlich brauchen:
svn blame filename
Es wird die Datei mit jeder Zeile vor drucken festgelegt durch die Zeit und Autor des Commits, das es zuletzt geändert hat.
Whoa das ist genial! Benutze seit Jahren SVN und wusste nie darüber: O –
Du brauchst vielleicht die ausführliche/-v Option, um den Zeitstempel zu sehen (ich mache das mit meinem Standard Build von svn 1.7.9). –
mein Professor schrieb das erste Schuld Plugin zu Svn. Ich musste das immer noch nachsehen. Er erledigt diese Aufgabe völlig selbst. : P –
Der seltsam benannte "Schuld" Befehl tut dies. Wenn Sie Tortoise verwenden, erhalten Sie einen Dialog "Von Revision", dann eine Dateiliste mit einem zeilenweisen Indikator für die Versionsnummer und den Autor daneben.
Wenn Sie mit der rechten Maustaste auf die Revisionsinformationen klicken, können Sie einen "Protokoll anzeigen" -Dialog aufrufen, der zusammen mit anderen Dateien, die zum Check-in gehörten, vollständige Checkin-Informationen enthält.
Das ist sehr nützlich, aber nicht das, was das OP gesucht hat, das ist eine vollständige Geschichte der Datei, nicht nur die historischen Beiträge der aktuellen Datei. Diese vollständige Historie ist nützlich, wenn Sie zurückschauen, um herauszufinden, warum bestimmter Code entfernt oder geändert wurde und wann. –
Im Gegenteil, der Name ist völlig richtig. Es sagt Ihnen, wen Sie für einen bestimmten (crappy/buggy/nicht verständlichen) Codeabschnitt verantwortlich machen können. –
Wäre es nicht gut, wenn der offensichtliche Name für den Befehl "Kredit" statt "Schuld" wäre? :) – Nick
Danke, Bendin. Ich mag deine Lösung sehr.
Ich habe es geändert, um in umgekehrter Reihenfolge zu arbeiten, mit den neuesten Änderungen zuerst. Was ist wichtig mit langjähriger Code, über mehrere Jahre aufrechterhalten. Normalerweise schicke ich es in mehr hinein.
svnhistory elements.py |more
Ich habe -r zu der Sorte hinzugefügt. Ich habe die Spezifikation entfernt. Handhabung für 'erste Aufnahme'. Es ist ein Fehler beim letzten Eintrag, da es nichts zu unterscheiden gibt. Obwohl ich damit lebe, weil ich nie so weit komme.
#!/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 [email protected]
svn diff -c$r [email protected]
echo
done
}
}
history_of_file $1
Wenn Sie ganze Geschichte einer Datei mit Code-Änderungen sehen möchten:
svn log --diff [path_to_file] > log.txt
Ich weiß nicht, wann die Option --diff hinzugefügt wurde, aber es funktioniert mit Svn 1.8.10, so dass kein Bash-Skript –
Ich denke, Svn 1.7.4 führte die Option '--diff' seit es hat Tests für die Option, während 1.7.3 keine hat - "subversion/tests/cmdline/log_tests.py". – valid
Nur eine kleine Anmerkung: Abhängig von der Länge des Verlaufs kann dies einige Zeit dauern, bevor die Datei log.txt vollständig gerendert wird (obwohl sie sofort lesbar ist). –
- 1. Svn alle Eigenschaften Änderungen zurücksetzen
- 2. Wie man Änderungen an SVN Extern festschreibt?
- 3. Wie hole ich svn: log Änderungen in git-svn?
- 4. SVN fördert Änderungen an Test und Produktion
- 5. So machen Sie lokale Änderungen an einer bestimmten Datei rückgängig
- 6. SVN Protokoll nicht alle Revisionen zu einer Datei
- 7. Kann ich in Mercurial Änderungen von einer Datei auf eine andere Datei in derselben Verzweigung anwenden?
- 8. Wie kann ich Änderungen an% ENV abfangen?
- 9. Änderungen verfolgen: svn + latex
- 10. Wie werden Änderungen an einzelnen Commits in einer Datei angezeigt?
- 11. Wie kann ich feststellen, ob in PHPStorm nicht gespeicherte Änderungen an einer Datei vorhanden sind?
- 12. Wie kann ich mit BeautifulSoup in Python vorgenommene Änderungen an einer HTML-Datei speichern?
- 13. Wie kann ich eine ältere Version einer SVN-Datei anzeigen?
- 14. Zeigen Sie alle Versionsnummern an, die Änderungen an einer bestimmten Datei in Mercurial vorgenommen haben.
- 15. Warum kann ich keine PSD-Datei (Photoshop) an SVN übergeben?
- 16. Wie svn in einer Datei ignorieren?
- 17. Wie kann ich alle SVN-Konflikte automatisch lösen? (Windows CLI)
- 18. Siehe letzte Änderungen in SVN
- 19. Wie kann ich ein einheitliches Protokoll von Änderungen an einer Reihe von Dateien sehen?
- 20. gleichzeitige Änderungen an XML-Datei in C#
- 21. wie man Änderungen an einer rpm Datei anpasst
- 22. Wie kann ich alle Symbole in einer SVG-Datei anzeigen?
- 23. Wie werden Änderungen an einer Datei vor dem Festschreiben angezeigt?
- 24. Wie kann ich alle Änderungen innerhalb eines Untergraphen verfolgen/beobachten?
- 25. Reparatur git-svn Repository nach der historischen Subversion Revision geändert
- 26. Kann ich Svn Rebase zu einer bestimmten SVN-Revision git? (Ähnlich wie svn up -r ...)
- 27. Änderungen an einer Datei in Git selektiv zurücksetzen oder auschecken?
- 28. Git rückgängig machen partielle Änderungen an einer Datei
- 29. Wie akzeptiere ich alle Änderungen von einer Fernbedienung?
- 30. Eclipse SVN Alle Änderungen für den Autor anzeigen
Es ist in der seltsamen Namen versteckt ist „schuld“ -Befehl. – goosemanjack
Ich dachte, @goosemanjack machte Witze, bis ich es versuchte. –