Używam SVN. Czasami coś mi brakuje, kiedy piszę komunikat zatwierdzenia. Ale po popełnieniu nie można go przywrócić, a nawet ja nie mogę edytować wiadomości. Dlaczego nie umieścili w nim funkcji edycji?
git-svn
i nikt nie będzie mądrzejszy.
Używam SVN. Czasami coś mi brakuje, kiedy piszę komunikat zatwierdzenia. Ale po popełnieniu nie można go przywrócić, a nawet ja nie mogę edytować wiadomości. Dlaczego nie umieścili w nim funkcji edycji?
git-svn
i nikt nie będzie mądrzejszy.
Odpowiedzi:
Zgodnie z często zadawanymi pytaniami dotyczącymi SVN można to zrobić, jeśli administrator repozytorium włączył tę funkcję lub jeśli masz lokalny dostęp administracyjny do repozytorium .
Jednak zrobienie tego jest prawdopodobnie złym pomysłem. W rzeczywistości zmieniasz historię. Jednym z punktów kontroli wersji jest prowadzenie historii i ścieżki audytu dla projektu. Zezwolenie na dowolne zmiany w historii pokonuje ślad audytu. Zamiast tego zalecałbym wykonywanie mniejszych zatwierdzeń, pisanie zwięzłych, ale jednoznacznych komunikatów zatwierdzania i ulepszanie osobistego przepływu pracy, aby zapobiec tym błędom.
Zasadniczo musisz mieć uprawnienia administratora (bezpośrednio lub pośrednio) do repozytorium, aby to zrobić. Możesz albo skonfigurować repozytorium, aby wszyscy użytkownicy mogli to zrobić, albo zmodyfikować komunikat dziennika bezpośrednio na serwerze.
Sprawdź często zadawane pytania dotyczące SVN tutaj.
Komunikaty dziennika są przechowywane w repozytorium jako właściwości dołączone do każdej wersji. Domyślnie właściwości komunikatu dziennika (svn: log) nie można edytować po zatwierdzeniu. Wynika to z faktu, że zmiany we właściwościach rewizji (w tym svn: log) powodują trwałe odrzucenie poprzedniej wartości właściwości, a Subversion próbuje zapobiec przypadkowemu wykonaniu tej czynności. Istnieje jednak kilka sposobów na przekonanie Subversion do zmiany właściwości wersji.
Pierwszym sposobem jest włączenie przez administratora repozytorium modyfikacji właściwości wersji. Odbywa się to poprzez utworzenie haka zwanego „przedpremierową zmianą” (więcej informacji na ten temat można znaleźć w tej sekcji książki Subversion). Hak „przed zmianą poprawki” ma dostęp do starej wiadomości dziennika przed jej zmianą, dzięki czemu może ją w jakiś sposób zachować (na przykład wysyłając wiadomość e-mail). Po włączeniu modyfikacji właściwości wersji można zmienić komunikat dziennika wersji, przekazując przełącznik --revprop do svn propedit lub svn, jak na przykład:
$svn propedit -r N --revprop svn:log URL $svn propset -r N --revprop svn:log "new log message" URL
gdzie N to numer wersji, którego komunikat w dzienniku chcesz zmienić, a URL to lokalizacja repozytorium. Jeśli uruchomisz to polecenie z kopii roboczej, możesz pominąć adres URL.
Drugim sposobem zmiany komunikatu w dzienniku jest użycie svnadmin setlog. Należy to zrobić, odwołując się do lokalizacji repozytorium w systemie plików. Za pomocą tego polecenia nie można modyfikować zdalnego repozytorium.
$ svnadmin setlog REPOS_PATH -r N FILE
gdzie REPOS_PATH jest lokalizacją repozytorium, N jest numerem rewizji, którego komunikat dziennika chcesz zmienić, a PLIK to plik zawierający nowy komunikat dziennika. Jeśli haczyk „przed zmianą poprawki” nie jest na swoim miejscu (lub z jakiegoś powodu chcesz ominąć skrypt przechwytujący), możesz również użyć opcji --bypass-hooks. Jeśli jednak zdecydujesz się skorzystać z tej opcji, bądź bardzo ostrożny. Być może omijasz takie rzeczy, jak powiadomienia e-mail o zmianie lub systemy kopii zapasowych, które śledzą właściwości wersji.
Odpowiedź Kamila Kisiela w odpowiedzi na podobne pytanie dotyczące przepełnienia stosu .
Ponieważ jest to scentralizowany system kontroli wersji - od razu po zatwierdzeniu zmiany (a komunikat zatwierdzenia jest umownie związany z zatwierdzeniem), każdy, kto ma dostęp do odczytu do repozytorium, może zobaczyć te informacje. Zmiana informacji po ich rozpowszechnieniu jest złym pomysłem , ponieważ ludzie mają inne zdanie na temat „rzeczywistości”.
Rozproszone systemy kontroli wersji, takie jak Git, łagodzą ten problem, zapewniając, że udostępnianie informacji innym jest niepodzielne i bez żadnych dodatkowych informacji, takich jak komunikaty zatwierdzania. Ale ta sama zasada obowiązuje tutaj: zniechęcasz się do zmieniania lokalnie rzeczy, które już udostępniłeś innym.