Чому я не можу редагувати повідомлення про фіксацію SVN?


12

Я використовую SVN. Іноді щось пропускаю, коли пишу повідомлення про фіксацію. Але як тільки це було здійснено, його неможливо повернути, і навіть я не можу редагувати повідомлення. Чому вони не поставили в ньому функцію редагування?


7
Нагадує історію про Dave.cpp про thedailtywtf
Falcon

1
Просто використовуйте git , це дозволяє об’єднувати коміти, редагувати повідомлення та робити все, що завгодно, зі своєю історією.
SK-логіка

Або якщо ви не можете, тоді використовуйте git-svnі ніхто не стане мудрішим.
Меттью Шарлі

@Matthew: як на Землі за допомогою git-svn ви можете змінити історію в repo-редакторі svn repo для редагування історії?
gbjbaanb

2
@gbjbaanb: Нічого, якщо ви вже підключились до SVN-сервера. Але якщо ви здійснили поступ лише на локальному рівні, ви все одно можете змінити повідомлення про фіксацію, перш ніж натискати його на репо-репортаж.
Меттью Шарлі

Відповіді:


15

Відповідно до SVN FAQ, ви можете, якщо адміністратор репозиторію ввімкнув це або якщо у вас є локальний адміністративний доступ до сховища .

Однак робити це, мабуть, погана ідея. Ви фактично змінюєте історію. Одним із пунктів контролю версій є підтримка історії та аудиту проекту. Якщо дозволити довільні зміни в історії, переможете слід аудиту. Натомість я рекомендую виконувати менші доручення, писати стислі, але явні повідомлення про фіксацію, та покращуючи особистий робочий процес для запобігання цих помилок.


4
@Matthew Навіть в git, зміна історії в будь-який момент є, на мій погляд, жахливою ідеєю. Історія повинна слугувати аудиторським слідком, і ніколи її ніколи з будь-якої причини не може змінювати ніхто.
Томас Оуенс

2
Тому слід мати аудиторський слід для повідомлення про виконання зобов’язань, оскільки зазвичай метою зміни повідомлення про виконання зобов’язань є полегшення догляду за історією проекту.
Пітер Тейлор

2
Припустимо, я виявив, що повідомлення про вчинення, яке я вніс місяць тому, вводить в оману, заплутано і прямо невірно . Чи не можу я додати коригувальну нотацію, яку побачать усі, хто бачить неправильне повідомлення? (Я погоджуюсь, що оригінальне повідомлення повинно бути легко доступним немодифікованим, а саму зміну слід відстежувати та відзначати часом. Але я не погоджуюся, що це є "історією, що змінюється".)
Девід Шварц

2
Неправильна інформація є неприйнятною, тому людям не можна дозволяти виправляти та уточнювати цю інформацію, оскільки це приховувало б їх порушення. Ого. Просто вау.
Девід Шварц

3
Ти чесно починаєш виглядати як само пародія. "Це повинно бути правильним, тому його ніколи не слід виправляти".
Девід Шварц

5

По суті, ви повинні мати права адміністратора (прямо чи опосередковано) на сховище, щоб це зробити. Ви можете налаштувати сховище так, щоб всі користувачі могли це зробити, або ви можете змінити повідомлення журналу безпосередньо на сервері.

Ознайомтесь із поширеними питаннями SVN тут.

Повідомлення журналу зберігаються у сховищі як властивості, додані до кожної версії. За замовчуванням властивість повідомлення журналу (svn: log) неможливо редагувати, коли воно робиться. Це відбувається через те, що зміни в властивостях ревізії (з яких svn: log є одним) призводять до того, що попереднє значення властивості буде назавжди відкинуто, і Subversion намагається запобігти цьому випадково. Однак існує кілька способів отримати Subversion для зміни властивості редагування.

Перший спосіб полягає в тому, щоб адміністратор сховища дозволив змінити властивості редагування. Це робиться шляхом створення гачка під назвою "pre-revprop-change" (див. Цей розділ у книзі Subversion, щоб отримати докладнішу інформацію про те, як це зробити). Гак "pre-revprop-change" має доступ до старого повідомлення журналу перед його зміною, тому він може певним чином зберегти його (наприклад, надіславши електронний лист). Після ввімкнення модифікацій властивостей версії ви можете змінити журнал повідомлення редакції, передавши перемикач --revprop на provnvv svn або пропсет svn, як будь-який із них:

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

де N - номер редакції, повідомлення журналу якого ви хочете змінити, а URL - місцезнаходження сховища. Якщо цю команду виконати з робочої копії, ви можете залишити URL-адресу.

Другий спосіб змінити журнальне повідомлення - використовувати svnadmin setlog. Це потрібно зробити, посилаючись на розташування сховища у файловій системі. Ви не можете змінити віддалений сховище за допомогою цієї команди.

$ svnadmin setlog REPOS_PATH -r N FILE

де REPOS_PATH - місце зберігання, N - номер редакції, повідомлення журналу якого ви хочете змінити, а FILE - файл, що містить нове повідомлення журналу. Якщо гачок "попередня зміна" не встановлений (або ви хочете чомусь обійти скрипт гачка), ви також можете скористатися опцією --bypass-hooks. Однак якщо ви вирішили скористатися цим варіантом, будьте дуже обережні. Можливо, ви обминаєте такі речі, як сповіщення електронною поштою про зміну або резервні копії систем, які відстежують властивості редагування.

Відповідь Каміля Кісіеля у відповідь на аналогічне запитання щодо Stack Overflow .


Коли ви копіюєте вставку відповіді з stackoverflow, вам слід принаймні позначити її як цитату та надати ОП (в цьому випадку Каміль Кісієль). Посилання на оригінал: stackoverflow.com/questions/304383/… Будь ласка, відредагуйте свою відповідь, або я збираюся подати вам заяву.
Сокіл

4

Оскільки це централізована система контролю версій - Як тільки ви здійснюєте зміну (і ваше повідомлення про зобов’язання по конвенції пов'язане з фіксацією), кожен, хто прочитав доступ до сховища, може побачити цю інформацію. Погано змінювати інформацію після її розповсюдження , оскільки люди закінчують іншу думку про "реальність".

Розподілені системи управління версіями на зразок Git полегшують цю проблему, переконуючись, що акт надання інформації доступним для інших є атомним та без будь-якої додаткової інформації, як повідомлення комісії. Але тут діє той самий принцип: Ви не відмовляєтесь змінювати речі, які ви вже зробили доступними для інших.


Вони могли дозволити кілька версій повідомлення про вчинення ...
Alex Feinman

1
@ l0b0 Об'єктивно не гірше продовжувати поширювати інформацію, яка є помилковою, оманливою чи схильною робити шкоду? Ведення обліку не вимагає закріплення помилкових даних.
користувач179700

1
@ user179700: Ти маєш рацію. У всіх VCSes, які я коли-небудь бачив, є принципово хибне припущення дизайну: У коміті є одне повідомлення про фіксацію, яке незмінне. Як каже Алекс, ми повинні "дозволити кілька версій повідомлення про фіксацію".
l0b0

@ l0b0 Я вважаю це питання цікавим, тим більше я його вважаю. Моя перша реакція прозвучала, просто пильніше пишіть. Нинішня практика, здається, перешкоджає цьому процесу. Мені теж цікаво, чи застосовують будь-які інші системи більш надійну практику. Час на інше питання міркує. +1
користувач179700

@ user179700: Я зараз сподіваюся написати сценарій, який дозволяє вам змінити повідомлення про фіксацію, але лише додавши додатковий рядок (накреслений часом). Це дозволяє виправляти помилки, зберігаючи слід аудиту.
Тинам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.