2009-08-04 9 views
19

Jaki jest najłatwiejszy sposób określenia, kiedy właściwość została ustawiona w pliku lub folderze? Zasadniczo szukam odpowiednika "svn winy", który działa na właściwości.Jak uzyskać historię właściwości pliku/folderu w SVN?

Podkomenda log umożliwia uzyskanie pełnej historii pliku lub folderu, w tym także, gdy właściwości zostały zmodyfikowane. Nie rozróżnia jednak modyfikacji właściwości i innych rodzajów modyfikacji, co oczywiście oznacza również, że nie powie nic o historii danej nieruchomości.

Polecenie statusu rozróżnia właściwości i inne rodzaje modyfikacji, ale działa tylko na kopii roboczej.

Zwalnia sama, obsługuje tylko pliki, nie katalogi i działa na zawartości, a nie na właściwościach.

Pomysły?

Odpowiedz

8

Najlepsze, o czym mogę pomyśleć, to napisanie skryptu lub aplikacji, która używa komendy svn propget, do zrzucenia aktualnej wartości właściwości do pliku tekstowego, a następnie powraca do wersji zrzucenia właściwości do innego pliku tekstowego i porównując te dwa. Gdy tylko wykryje zmianę, wypisuje numer wersji (w rzeczywistości późniejszy numer wersji, która wprowadziła zmianę) wraz z użytkownikiem, który ją popełnił.

Oto przykładowe polecenie, aby zrzucić svn: ignore do katalogu słowniku przy rewizji 80:

svn propget -r 80 svn:ignore dictionary 
+0

Zamierzam wziąć braku lepszych opcji jako odpowiedź, że nie ma gotowy sposób to zrobić. Ach tak. –

+0

Wspaniałą rzeczą jest to, że osoba, która popełniła tę zmianę, niekoniecznie jest osobą, która zmieniła nieruchomość. –

+0

Nie rozumiem, @anonfunc, jak ktoś mógłby zmienić nieruchomość? Myślę, że pierwsza wersja zawierająca nową wartość właściwości jest zawsze wersją, która dokonała zmiany. –

1
#!/bin/bash 
# This is not a great solution, but it works for gathering the data 

CURRENT_REVISION=95300 
OLDEST_REVISION=93000 
URL="file:///home/svn/repo/project/dir/target.c" 
PROPERTY_NAME="svn:externals" 

for i in `seq $OLDEST_REVISION $CURRENT_REVISION` 
do 
    svn -r$i propget "$PROPERTY_NAME" "$URL" | sed -e "s/^/$i\t/" 
done 
7

Jednym ze sposobów, aby uzyskać listę gdy właściwości danego folderu zmieniła się:

svn log -v . |grep " M /trunk/datacenter$" -B2 

co daje następujący wynik:

r963 | someuser | 2013-08-26 20:32:37 +0200 (Mon, 26 Aug 2013) | 4 lines 
Changed paths: 
    M /trunk/datacenter 
-- 
r908 | someotheruser | 2013-08-15 12:15:03 +0200 (Thu, 15 Aug 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 
-- 
r413 | someuser | 2013-04-26 09:02:08 +0200 (Fri, 26 Apr 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 

Następnie można spojrzeć na każdej wersji, aby zobaczyć, co się zmieniło:

$ svn diff -c963 

na dole:

... 

Property changes on: . 
___________________________________________________________________ 
Modified: svn:ignore 
## -22,3 +22,5 ## 

.idea 
.classpath 
+ 
+dev-config.groovy 

Wady:

  • Nie sposób określić właściwość jesteś zainteresowany
  • Nużący

Uwaga: nie jestem pewien, B2 jest wystarczające we wszystkich przypadkach, jak w wierszu „M/trunk/datacenter” nie może być pierwsza linia

+0

Najlepsza odpowiedź, wznowiono to już dawno temu. Trudno uwierzyć, że Subversion nie zapewnia natywnego sposobu filtrowania dziennika dla tego rodzaju szczegółów. – javabrett

0

Moja svn-extensions przybornik ma teraz svn-prop-annotate i (jako specjalizacji) svn-mergeinfo-annotate polecenia. Działają słabo (ponieważ działają dla każdej potencjalnej zmiany svn log i svn diff) i nadal mogą mieć pewne zależności i cechy do mojego konkretnego stylu pracy, ale spróbuj, jeśli jesteś wystarczająco zdesperowany.

Oto niektóre przykładowe dane wyjściowe:

$ svn-mergeinfo-annotate --author karkat -l 5 
67645 ingo.karka Merged /branches/1.50/foobar:r67488 
67423 ingo.karka Merged /branches/1.50/foobar:r67315,67331 
67339 ingo.karka Merged /branches/1.50/foobar:r67279 
53320 ingo.karka Merged /branches/foo-1.01:r53317 
Powiązane problemy