Czy istnieje sposób na zmianę nazwy użytkownika SVN w całej historii repozytorium?

Kiedy mój zespół zaczynał pracę z SVN, wszyscy po prostu używaliśmy naszych imion przy zatwierdzaniu do repozytorium, jednak teraz, gdy nasz zespół się rozrósł, napotykamy problemy, ponieważ właśnie zatrudniliśmy drugiego Mike.

Chcielibyśmy zmienić nazwy użytkowników na takie same jak nazwa użytkownika na ich komputerze (imię i nazwisko initial + last name). Problem, który widzę jest taki, że historia SVN nadal będzie pokazywać stare nazwy użytkowników w commitach.

Czy jest narzędzie czy istnieje możliwość zmiany nazw użytkowników w całej historii repozytorium?

Na przykład chciałbym, aby każdy commit, który jest obecnie przypisany Mike ' owi, zmieniał się na msmith, aż do wersji 1.

Moja pierwsza myśl jest taka, że będę musiał wykonać parsowanie i przetwarzanie na pliku zrzutu, ale narzędzie byłoby miłe.

Author: Siddharth, 2009-07-28

7 answers

Możesz użyć svndumptool :

Svnadmin dump path/to/my/repo > repo.dump

Svndumptool transform-revprop svn: author originalregexp newvalue repo.wyrzuć newrepo.dump

 20
Author: Jason McVetta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 16:48:44

TortoiseSVN ma doskonałe wsparcie dla tej funkcjonalności: w swoim oknie dialogowym Revision Log można filtrować według autora (nawet za pomocą wyrażeń regularnych), wybrać wersje z filtrowanej listy zgodnie z życzeniem (Zwykle Wszystkie, jak w tym pytaniu) i wybrać "Edytuj autora" z menu kontekstowego.

Warunek wstępny posiadania Pre-revprop-change hook w miejscu, jak wspomniano w jeroenhs odpowiedź nadal obowiązuje, oczywiście.

Przetwarzanie jest raczej powolne, ale w zależności od potrzeb może to nadal być dużo szybsze i / lub wygodniejsze niż zrzut całego repozytorium i przetworzenie tych potencjalnie ogromnych plików zrzutu za pomocą skryptów.

 13
Author: Steffen Opel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:41

Tak jest:

svn propset --revprop -r revision_number svn:author new_username

Jednak svn domyślnie nie zezwala na zmianę właściwości rewizji. W tym celu należy skonfigurować skrypt Hooka pre-revprop-change. W systemie windows wystarczy umieścić plik bat w folderze hooks w repozytorium, który zawiera po prostu jedną linię:

exit 0

Jeśli to jest skonfigurowane, powinieneś być w stanie napisać skrypt dla swoich potrzeb.

Edit: nie testowałem tego, ale myślę, że to powinno zadziałać w PowerShell:
([xml] ( svn log --xml )).log.logentry 
   | ? {$_.author -eq "Mike"} 
   | foreach {svn propset --revprop -r $_.revision svn:author msmith}
 12
Author: jeroenh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 19:54:04

Na serwerze repozytorium Możesz:

echo -n "msmith" > msmith.txt
svn log /svn -q | grep Mike | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r

Oto co to robi:

  1. Zapisz nową nazwę użytkownika w pliku bez nowej linii na końcu (echo-n)
  2. Pobierz pełny dziennik dla repozytorium w /svn, wyświetlając tylko informacje podsumowujące (Nie wiadomość dziennika) (SVN log-q)
  3. Znajdź linie z Mike (grep)
  4. Filtruj wszystko z wyjątkiem pierwszego pola (rewizja#) (Wytnij)
  5. Uruchom polecenie svnadmin przy każdej rewizji znalezionej w kroku 4 (xargs). Only pass jedna zmiana na wykonanie polecenia (- n1). To zastąpi właściwość svn: author zawartością msmith.plik txt.
 6
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 20:43:42

W Thunder Below , historii USS Barb w ii wojnie światowej, na pokładzie pojawia się nowy oficer. Kapitan pyta go jak się nazywa. "Mike", odpowiada. "Nie, mamy już Mikrofon", mówi kapitan. "Będziemy cię nazywać Robert. W walce, kiedy wydaję rozkazy, nie ma wątpliwości, z kim rozmawiam."

Chodzi mi o to, że istnieje precedens, aby Twój nowy Mike wybrał inne imię.

 3
Author: user47559,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 17:22:37

Zajęło mi to sporo czasu, ale w końcu znalazłem skrypt Perla, który działa na pliku zrzutu SVN.

Próbowałem go dziś rano na wysypisku mojego repozytorium i działało bez zarzutu.

Oto bezpośredni link

 2
Author: Wally Lawless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-29 13:20:15

Z pamięci, standardową odpowiedzią SVN na zmianę czegokolwiek w historii jest zrobienie zrzutu tekstowego bazy danych, przeszukiwanie-Zamiana przez nią i ponowne utworzenie z niej bazy danych.

Ale tak naprawdę nie spojrzałem na wewnętrzne SVN od czasu jego 0.X-dni, więc mogę już iść...

 -2
Author: Morten Siebuhr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 16:55:09