Що означає атомна комісія для версійної системи?


34

Однією з причин, чому програмісти віддають перевагу SVN перед CVS, це те, що перший дозволяє атомні коміти? Що це означає ?


Це може допомогти комусь , він пояснює, що це таке (він використовує git як приклад, але може бути застосований для інших VCS)
Fagner Brack

Відповіді:


69

Це означає, що коли ви виконуєте зобов’язання в системі контролю версій, все, що ви хочете скористатися, відбувається, АБО нічого не робить.

У CVS, коли ви намагаєтесь виконати компіляцію, можливо, що команда може досягти успіху в декількох файлах, тоді не вдасться виконати кілька інших (тому що вони змінилися) Це залишає сховище в нещасному стані, оскільки половина ваших зобов’язань не існує, і, ймовірно, ви залишили речі в стані, коли вони не збиратимуться або гірше. Тепер вам потрібно поспішати та інтегрувати будь-які зміни, щоб ви могли ввести інші файли до того, як комусь іншому потрібно буде оновити та отримати ваш зламаний набір змін.

У SVN цього не відбудеться - SVN або здійснить все, що ви змінили, або вийде з ладу з усім набором змін. Таким чином, ви ніколи не залишатимете сховище у порушеному стані через проблеми фіксації.


9
Важливий результат цього є те, що якщо ви перевірити в будь-якому заданому стані , то результат завжди відповідає стану ( за винятком будь-яких призначених для користувача помилок , такі , як забувши зробити файл, звичайно): Це або з перед тим фіксації або після прихильність і нічого середнього. У CVS це може бути "на півдорозі через коміти". Поведінка SVN дуже приємна для таких речей, як безперервна інтеграція. Для систем CVS ті системи, які використовувались для забезпечення "тихого періоду", коли вони використовували лише даний виїзд, якщо більше не здійснюють, коли виконано задану кількість секунд / хвилин після оформлення каси.
Йоахім Зауер

2
темні спогади про використання CVS вражають мене, коли я це читав.
shabunc

9
@Spoike - правда, але це навмисний вчинок. У CVS проблеми можуть траплятися без вашої власної вини, тоді як у SVN вам доведеться працювати над цим.
Майкл Коне

3
@DanNeely - CVS здійснює їх по черзі. Ось чому ви отримуєте часткові коміти - деякі файли проходять, потім він зупиняється, коли потрапляє на один, який він не може здійснити (через конфлікт). Я думаю, що це результат CVS, який спочатку виростав із RCS.
Майкл Коне

4
Також зауважте, що за допомогою CVS, навіть якщо ви не потрапили на помилку, і все сталося дозволено, хтось із більш швидким з'єднанням може оновити своє джерело дерева на півдорозі комітету, залишаючи їх у непослідовному стані. (І я думаю, що часові позначки будуть настільки ж розповсюджені, так що спроба перевірити дерево як дату / час, що випала посеред комітету, матиме подібні результати.)
SamB

15

Це пояснюється, наприклад, у байовій CVS. Мені була перервана стаття, написана Енді Лестером :

Якщо я спробую здійснити в Subversion, але один з файлів має конфлікт або застарів, жоден із файлів не заповнюється. У CVS у вас є напівкомітований набір файлів, який потрібно виправити ПРАВО ЗАРАЗ.

Той факт, що CVS змушує програміста негайно виправити злиття, є настільки ж непродуктивним, як це стає. Порівняно з цим, суттєвою перевагою є можливість затримати / скасувати / обережно об'єднати зміни.


Інші переваги SVN над CVS, пояснені у вищевказаній статті:

  • Локальні версії всього, що ви робите
     
    Якщо ви хочете, щоб відеозаписи були різними, ви повинні мати можливість підключитися до вашого сховища. Ні мережного з'єднання, ні різного. Subversion зберігає локальні незаймані копії того, над чим ви працюєте, тому svn diff буде добре працювати. Хочете почати спочатку? svn revert також працює без зв'язку.

  • Символічні назви ревізій
     
    HEAD - це назва кінчика багажника в CVS, але я завжди хотів, щоб я міг сказати "-r-1", як я міг би повернутись у дні PVCS. За допомогою CVS я повинен робити реєстр резюме для того, що я редагую, а потім віднімати його. Це не весело. З Subversion я можу сказати svn diff -r PREV.

  • Звіт про реальний статус
     
    У CVS єдиний спосіб переконатися, що щось на сервері новітніше, - це оновлення відеокліпів та сподівання, що все, що виходить, не викликає конфліктів. За допомогою команди svn status я отримую реальний статус, тому я можу побачити, чи є конфлікти перед тим, як зробити оновлення.

  • Корисне вирішення конфліктів злиття
     
    У CVS, якщо є конфлікти, ви отримуєте у своєму файлі маркери конфліктів. У програмі Subversion ви отримуєте маркери конфлікту, PLUS - копію оригінального, передконфліктного файлу, PLUS - версію, що надійшла з сервера, PLUS - версію, яку ви редагували спочатку. Тоді ви повинні явно svn резонувати filename.txt, щоб повідомити Subversion, що ви вирішили проблему. Більше не випадково повертається в CVS з маркерами конфлікту, які все ще є.


8

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

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


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

2
так, це гарна річ, часткові вчинки погані
jk.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.