Wiem, że mogę svn diff -r a:b repo
zobaczyć zmiany między dwiema określonymi wersjami. To, co chciałbym, to różnica dla każdej wersji, która zmieniła plik. Czy takie polecenie jest dostępne?
Wiem, że mogę svn diff -r a:b repo
zobaczyć zmiany między dwiema określonymi wersjami. To, co chciałbym, to różnica dla każdej wersji, która zmieniła plik. Czy takie polecenie jest dostępne?
Odpowiedzi:
Nie ma wbudowanego polecenia, więc zwykle robię coś takiego:
#!/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
}
}
Następnie możesz zadzwonić za pomocą:
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]
działa dokładnie tak! stackoverflow.com/a/24938573/3185510
Trochę różni się od tego, co opisałeś, ale myślę, że może być to, czego naprawdę potrzebujesz:
svn blame filename
Wydrukuje plik z każdą linią poprzedzoną czasem i autorem zatwierdzenia, który ostatnio go zmienił.
Jeśli chcesz zobaczyć całą historię pliku ze zmianami w kodzie:
svn log --diff [path_to_file] > log.txt
--diff
ponieważ ma testy dla opcji, podczas gdy 1.7.3 nie ma żadnych - subversion/tests/cmdline/log_tests.py
.
--limit <number>
opcją. Na przykład:svn log --diff --limit 5 [path_to_file]
Możesz użyć git-svn
do zaimportowania repozytorium do repozytorium Git, a następnie użyć git log -p filename
. To pokazuje każdy wpis dziennika dla pliku, po którym następuje odpowiedni plik różnicowy.
git log X..Y -o filename
Zacząć od
svn log -q file | grep '^r' | cut -f1 -d' '
Spowoduje to wyświetlenie listy wersji, w których plik się zmienił, której możesz następnie użyć do skryptu powtarzających się wywołań 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
miły mały
Robi to dziwnie nazwane polecenie „blame”. Jeśli używasz Tortoise, pojawi się okno dialogowe „od wersji”, a następnie lista plików ze wskaźnikiem wiersz po wierszu numeru wersji i autora obok niego.
Jeśli klikniesz prawym przyciskiem myszy informacje o wersji, możesz wyświetlić okno dialogowe „Pokaż dziennik”, które zawiera pełne informacje o meldowaniu się wraz z innymi plikami, które były częścią tego wpisu.
O ile wiem, nie ma wbudowanego polecenia svn, aby to osiągnąć. Będziesz musiał napisać skrypt, aby uruchomić kilka poleceń, aby zbudować wszystkie różnice. Prostszym podejściem byłoby użycie klienta svn GUI, jeśli jest taka opcja. Wiele z nich, takich jak subwersywna wtyczka do Eclipse, zawiera listę historii pliku, a także umożliwia przeglądanie różnic każdej wersji.
Dzięki, Bendin. Twoje rozwiązanie bardzo mi się podoba.
Zmieniłem to tak, aby działało w odwrotnej kolejności, pokazując najpierw najnowsze zmiany. Co jest ważne w przypadku długiego kodu, utrzymywanego przez kilka lat. Zwykle łączę to w więcej.
svnhistory elements.py |more
Dodałem -r do sortowania. Usunąłem specyfikację. obsługa „pierwszego rekordu”. Jest to błąd przy ostatnim wpisie, ponieważ nie ma z czym go porównywać. Chociaż żyję z tym, ponieważ nigdy nie schodzę tak daleko.
#!/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
Podczas badania tego tematu widziałem kilka częściowych odpowiedzi. To właśnie zadziałało dla mnie i mam nadzieję, że pomoże innym. To polecenie wyświetli dane wyjściowe w wierszu poleceń, pokazując numer wersji, autora, sygnaturę czasową wersji i wprowadzone zmiany:
svn blame -v <filename>
Aby ułatwić wyszukiwanie, możesz zapisać wynik do pliku i użyć polecenia grep pod kątem tego, czego szukasz.