Jak edytować wiadomość dziennika już zatwierdzoną w Subversion?

Czy istnieje sposób na edycję wiadomości dziennika pewnej rewizji w Subversion? Przypadkowo napisałem niewłaściwą nazwę pliku w wiadomości commit, co może być później mylące.

I ' ve seen Jak edytować niepoprawny komunikat o zatwierdzeniu w Git?, ale rozwiązanie tego pytania nie wydaje się być podobne dla Subversion(zgodnie z svn help commit).

 519
Author: Community, 2008-11-20

9 answers

Zasadniczo musisz mieć uprawnienia administratora (bezpośrednio lub pośrednio) do repozytorium, aby to zrobić. Możesz skonfigurować repozytorium tak, aby umożliwiało to wszystkim użytkownikom lub zmodyfikować wiadomość dziennika bezpośrednio na serwerze.

Zobacz tę część z Subversion FAQ (moje podkreślenie):

Wiadomości dziennika są przechowywane w repozytorium jako właściwości dołączone do każda rewizja. domyślnie log właściwość message (svn: log)nie może być edytowane po jego popełnieniu . To jest ponieważ zmiany w właściwościach revision (z czego svn:log jest jeden) powoduje, że poprzednia wartość nieruchomości ma być trwale odrzucone, a Wywrotka / align = "left" / przypadkowo. Istnieją jednak kilka sposobów na uzyskanie Subversion do zmiana właściwości revision.

Pierwszy sposób jest dla repozytorium administrator, aby włączyć rewizję modyfikacje nieruchomości. Zrobione. tworząc hook o nazwie "pre-revprop-change "(patrz Ta sekcja w książce Subversion więcej szczegóły jak to zrobić). Na hak "pre-revprop-change" ma dostęp do starego komunikatu dziennika przed jego zmieniony, dzięki czemu może zachować go w niektórych sposób (np. wysyłając e-mail). Po zmianie właściwości modyfikacje są włączone, można Zmień wiadomość dziennika rewizji przez Przejście przełącznika --revprop do svn propedit lub svn propset, jak jeden z nich:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

Gdzie N na numer wersji, którego log wiadomość, którą chcesz zmienić, A adres URL jest lokalizacja repozytorium. Jeśli uruchom to polecenie z działającego skopiuj, możesz pominąć adres URL.

Drugi sposób zmiany dziennika wiadomością jest użycie svnadmin setlog. należy to zrobić, odwołując się do lokalizacja repozytorium na system plików. Nie można modyfikować pilota repozytorium przy użyciu tego polecenia.

$ svnadmin setlog REPOS_PATH -r N FILE

Gdzie REPOS_PATH jest repozytorium położenie, N jest numerem rewizji czyja wiadomość dziennika chcesz zmienić, i plik jest plikiem zawierającym nowy Zaloguj wiadomość. Jeśli "pre-revprop-change" hook nie jest w miejsce (lub chcesz ominąć hak skrypt z jakiegoś powodu), można również użyj opcji --bypass-hooks. Jeśli jednak zdecydujesz się na użycie tego opcja, bądź bardzo ostrożny. Możesz być omijając takie rzeczy jak e-mail powiadomienia o zmianie lub kopia zapasowa systemy, które śledzą zmiany właściwości.

 429
Author: Kamil Kisiel,
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
2011-02-24 11:32:38

Po uruchomieniu tego polecenia,

svn propedit svn:log --revprop -r NNN 

I na wszelki wypadek, gdybyś zobaczył tę wiadomość:

Żądanie DAV nie powiodło się; możliwe, że pre-revprop repozytorium-zmiana hook nie powiódł się lub nie istnieje

Its ponieważ Subversion nie pozwala modyfikować wiadomości logów, ponieważ są one niesprawdzone i zostaną utracone na stałe.

Przejdź do katalogu hooks na serwerze Subversion (zamień ~ / svn / reponame na katalog Twojego repozytorium)

cd ~/svn/reponame/hooks

Usuń rozszerzenie

mv pre-revprop-change.tmpl pre-revprop-change

Make it executable (cannot do chmod +x!)

chmod 755 pre-revprop-change

Źródło

 79
Author: Alex. S.,
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-06-21 05:57:24

Oto przydatna odmiana, której nie widzę w faq. Możesz zwrócić bieżącą wiadomość do edycji, określając edytor tekstu.

svn propedit svn:log --revprop -r N --editor-cmd vim
 43
Author: mcqwerty,
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-09-14 00:21:58
svnadmin setlog /path/to/repository -r revision_number --bypass-hooks message_file.txt
 35
Author: nickf,
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
2008-11-20 05:17:58

To też ostatnio mi zlecono.

Chcieliśmy, aby nasi programiści mogli modyfikować tylko własne komunikaty commit i ograniczać, jak daleko mogą to zrobić. Zdecydowaliśmy, że będą mogli modyfikować wszelkie wiadomości dziennika popełnione tego dnia, naprawić literówki itp.

Po obejrzeniu kilku innych przykładów w Internecie włamałem się do tego razem, jesteśmy w środowisku windows, więc to jest nasza zawartość pre-revprop-change.bat:

@ECHO OFF

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow user to modify their own log messages
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set AUTHOR=
for /f "delims=" %%a in ('svnlook author -r %REV% %REPOS%') do @set AUTHOR=%%a

if /I not '%AUTHOR%'=='%user%' goto ERROR_WRONGUSER

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow user to modify log messages from today, old messages locked down
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set DATESTAMP=
for /f "delims=" %%a in ('svnlook date -r %REV% %REPOS%') do @set DATESTAMP=%%a

for /F "tokens=1-2 delims= " %%a in ("%DATESTAMP%") do (
 set DATESTAMPDATE=%%a
 set DATESTAMPTIME=%%b )

:: Expects DATESTAMPDATE in the format: 2012-02-24
for /F "tokens=1-3 delims=-" %%a in ("%DATESTAMPDATE%") do (
 set DATESTAMPYEAR=%%a
 set DATESTAMPMONTH=%%b
 set DATESTAMPDAY=%%c )

:: Expects date in the format: Thu 08/01/2013
for /F "tokens=1-4 delims=/ " %%a in ("%date%") do (
 set YEAR=%%d
 set MONTH=%%b
 set DAY=%%c )

if /I not '%DATESTAMPYEAR%'=='%YEAR%' goto ERROR_MSGTOOOLD
if /I not '%DATESTAMPMONTH%'=='%MONTH%' goto ERROR_MSGTOOOLD
if /I not '%DATESTAMPDAY%'=='%DAY%' goto ERROR_MSGTOOOLD

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
 set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log properties are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_WRONGUSER
echo You are not allowed to modify other user's log messages. >&2
goto ERROR_EXIT

:ERROR_MSGTOOOLD
echo You are not allowed to modify log messages older than today. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1 

Edit: oryginalny pomysł na to przyszedł z ten wątek :

 16
Author: Josh Weatherly,
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
2013-08-01 21:55:51

Jeśli używasz IDE takiego jak eclipse, możesz użyć tego prostego sposobu.

Right click on the project -> Team - Show history

W Tym right click on the revision id for your commit and select 'Set commit properties'.

Możesz zmodyfikować wiadomość, jak chcesz stąd.

 12
Author: mani_nz,
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
2013-12-26 11:25:53

W systemie Windows, używając klienta Tortoise SVN:

  1. Kliknij prawym przyciskiem myszy w folderze projektu i wybierz "Pokaż dziennik"
  2. w oknie Log Messages kliknij prawym przyciskiem myszy na rewizji i wybierz "Edytuj wiadomość log"

Jeśli to nie działa, może ze względu na sposób konfiguracji SVN na serwerze, przeczytaj inne odpowiedzi tutaj.

 12
Author: Andrei N.,
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
2016-09-06 15:37:03

Jeśli Twoje repozytorium umożliwia ustawienie właściwości rewizji za pomocą haka pre-revprop-change, możesz znacznie łatwiej zmieniać wiadomości dziennika.

svn propedit --revprop -r 1234 url://to/repository

Lub w TortoiseSVN, AnkhSVN i prawdopodobnie wielu innych klientach subversion, klikając prawym przyciskiem myszy na wpis dziennika, a następnie 'zmień wiadomość dziennika'.

 7
Author: Bert Huijben,
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
2008-11-20 10:32:26

Subversion FAQ obejmuje to, ale używa kilku mylących niezdefiniowanych terminów, takich jak REPOS_PATH, bez podawania rzeczywistych przykładów.

Może to potrwać kilka prób, więc zapisz zaktualizowaną wiadomość zatwierdzającą w pliku. W przeciwieństwie do plików svn-commit.tmp, Subversion nie zachowa Twojego pisania, jeśli wystąpi problem.

W katalogu roboczym Uruchom

svn propedit -r N --revprop svn:log

Aby edytować komunikat commit. Jeśli to zadziała, świetnie! Ale pewnie nie, bo svn:log właściwość revision jest unversion, a Subversion domyślnie powstrzyma cię przed nadpisaniem jej za pomocą skryptu Hooka pre-revprop-change, lub komunikat o błędzie, że nie masz takiego Hooka.

Aby zmienić Hooki, potrzebny jest dostęp do systemu plików, na którym znajduje się repozytorium. svn info powie Ci Root repozytorium. Załóżmy, że to ~/svnrepo.

  1. cd do ~/svnrepo/hooks
  2. czy istnieje pre-revprop-change lub pre-revprop-change.bat scenariusz? Jeśli tak, to tymczasowo skomentuj część to przerywa, jeśli spróbujesz zmienić svn:log.
  3. Inaczej, na Windows, Utwórz pusty plik o nazwie pre-revprop-change.bat. Jest jeden sposób, aby to zrobić:

    copy con pre-revprop-change.bat
    ^Z
    
  4. W Przeciwnym Razie, na Unixie, Uruchom

    echo '#!/bin/sh' > pre-revprop-change
    chmod +x pre-revprop-change
    
  5. W kopii roboczej Uruchom svn propedit -r N --revprop svn:log ponownie

  6. Cofnij zmiany do ~/svnrepo/hooks/svn-revprop-change(.bat)
 2
Author: andrewdotn,
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-07 14:43:02