Почитавши документацію по SVN в Delphi, спробував попрацювати з системою контролю версій з Delphi. У документації наводиться ось така порівняльна таблиця функціоналу TortoiseSVN і Delphi варіанти цього функціоналу. Спробуємо створити простий VCL проект і пройтися по цій таблиці.
Створення вихідного проекту
Отже, заведемо спеціальну папку для експериментів, наприклад DelphiSVN, в неї помістимо папку SourceFolder, в якій і збережемо наш початковий проект.
Імпорт в репозиторій на сервері VisualSVN
На першому кроці нам знадобиться імпортувати проект в репозиторій SVN. У доках, в таблиці, сказано, для імпорту потрібно зробити наступне
Система пропонує вибрати з Git, Mercury і Subversion
Зверніть увагу!
Ми імпортували 4 файлу, а в папці їх було 5. Якби ми робили імпорт з "черепахи", тобто з TortoiseSVN, то на сервер вирушило б всі 5 файлів. І в подальшому з цими файлами-примарами потрібно було б розбиратися в ручну. А так Delphi відправив тільки ті файли, які безпосередньо відносяться до проекту. Далі ми побачимо, що ці файли-примари збільшуються, з 1 до 3 в моєму експерименті.
До чого це? При роботі - имхо краще вибрати з чим переважно будемо працювати, або з Delphi, або з Черепахи, з усіма наслідками, що випливають. Якщо з Delphi, то вона сама знає які файли імпортувати, щоб потім не мучитися з синхронізацією, а якщо з Черепахи, то тоді потрібно розбиратися, що це за файли і як вони оновлюються. Тому що в моєму випадку, я спостерігав, що вони оновлювалися під час запуску програми, або закриття проекту і так далі.
У будь-якому випадку і той і інший підхід працюватимуть.
Repo-Browser або перевірка - чи все загрузилось нормально?
У таблиці документації зазначено наступне.
Do either of the following:
- Project Manager | right-click a file | Browse Repository.
- Project Manager | right-click a project | Browse Repository | choose either:
- Subversion> Browse Repository> From Repository Root
- Subversion> Browse Repository> From Project Directory
Що ж - нам потрібен не корінь Репозиторія, а директорія проекту в репозиторії, тоді вибираємо другий варіант.
Отримуємо наступну картину
Всі 4 файлу, які відправляли на сервер - знаходяться там. Хоча на локальному диску 6 файлів на даний момент - мабуть якісь додаткові файли. Мабуть менеджер імпорту щось врахував і завантажив тільки 4 файлу. Ну в загальному, подивимося, що далі буде.
Виділення робочої копії зі сховищ
У документації з цього приводу написано
Отже, закриємо поточний проект і відкриємо новий, який буде під контролем версій.
Delphi знову нас запитує про систему контролю версій - вибираємо SubVersion
Далі найцікавіше - нам потрібно вибрати шлях з якого Delphi завантажить файли проекту для контролю версій і шлях, в якому у нас буде перебувати робоча копія. Зробимо це в такий спосіб.
На початку посту ми створили спеціальну папку для експериментів DelphiSVN, в ній же створимо WorkFolder, в яку завантажимо файли з сервера.
Delphi благополучно завантажить файли і запитає який проект відкрити.
цікавий момент
Тут цікавий момент вийшов. І при імпорті на сервер з SourceFolder і при завантаженні в WorkFolder Delphi поставила їх на контроль - це можна побачити, якщо просто зайти в папку DelphiSVN - обидві папки підсвічені зеленим значком - означає, що синхронізація з сервером SVN виконана.
Збереження змін на сервер (Commit)
Зробимо якісь зміни, наприклад додамо ListBox і один рядок Line1
У документації написано наступне
Що ж, зробимо це ...
Delphi повернула нас до проекту.
У документації написано
Do either of the following:
Виберемо перший варіант.
У документації написано
Також кольором підсвічується - що додалося, а що поменшало. Зліва плюси і мінуси, я так розумію, в плюсі те, що додалося, в мінусі - то, що було.
Подивимося на другий файл зі списку вище, Unit.dfm - тут також, Delphi дружелюбно нам підсвічує, що змінилося.
У документації це виглядає наступним чином
History tab | click (Annotate).
How To: Use the Annotation Feature.
Потрібно вибрати Юніт
Потім вибрати ревізію
І натиснути на анотацію
Якщо на сервері хтось щось поміняв, і нам потрібна конче свіжа копія, то робимо Update.
Update проекту в цілому
Ця операція відновлення пошкоджених або конфліктних файлів при невдалому Commit або Update. Тобто по суті це UPdate файлів з сервера, але мабуть з якимись специфічними моментами. Сам точно не знаю як це працює.
У документації написано наступне
У балці ця операція ніяк не відбивається.
відкат змін
У тій таблиці, по якій ми йшли відкат змін прямо не описаний, але тут нічого складного. Зайдемо в лог і зробимо Revert на тій ревізії до якої хочемо повернутися.
Delphi перепитає нас - в здоровому ми розумі?
Далі можливо випаде ось така помилка
Просить оновитися спочатку, що ж - зробимо це і повторимо Revert
Погодимося на перезавантаження і побачимо наступне
Після відкату - якщо нам дійсно потрібно це стан - потрібно зробити Commit - закріпити цей стан на сервері.
Ну і последее - дивимося лог
Загалом, ми виконали всі основні операції по роботі з клієнтом. З приводу командою роботи і моделі злиття - напишу в окремому пості.