Система керування версіями Git. Система контролю версій - яка краще

Багато хто з тих, хто пов'язаний з розробкою програмного забезпеченнячули про Git. Що таке ці три літери? Дуже важливо зрозуміти опис, а також принципи функціонування, щоб надалі ефективно використовувати цю систему контролю версій, у якій, на відміну від інших подібних систем, абсолютно інші поняття про інформацію, роботу з нею, незважаючи на схожий користувальницький інтерфейс. Отже, що таке Git?

Опис

Git є розподіленою системою для управління версіями файлів, що розробляються. Створено її було в 2005 році автором ОС Linux. Ця система здійснює синхронізацію роботи з сайтом, а також зберігає та оновлює зміни у файлах. Це дуже зручний підхід у разі роботи над проектом кількох розробників. На сьогоднішній день у багатьох відомих проектах використається саме Git. Що таке використання дає? Наприклад, розробкою операційної системи Androidзаймається велика кількість програмістів. Було б дуже незручно, якби один із них вносив зміни, а інші про це не знали. Git дозволяє всім бути в курсі всіх змін, а в разі помилок повернутися до попередніх версій файлів.

Використання зліпків, а не патчів


Головна відмінність Git від інших є те, як вона дивиться на дані. Більшість програм зберігає інформацію як списку змін, званих патчами для файлів. Такі системи до даних, що зберігаються, відносяться як до набору файлів, а також набору змін, які зроблені для кожного файлу, щодо часу. Як зберігає дані Git? Що таке є у цій системі, що відрізняє її від інших? Замість патчів, дані, що зберігаються, тут вважаються набором зліпків маленької файлової системи. Щоразу, коли користувач фіксує нову версію проекту, система просто зберігає зліпок стану файлів на даний момент. Щоб підвищити ефективність у тому випадку, коли файл не змінювався, система не зберігає його, а робить посилання на раніше збережений екземпляр, до якого були внесені останні зміни.

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

Переважно локальні операції


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

Ще локальна роботаозначає, що можна багато чого зробити без підключення до мережі. Наприклад, розробник може вносити зміни, перебуваючи у транспорті. Багато системах контролю такої можливості немає.

Спостереження за цілісністю даних

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

Дані найчастіше додаються


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

Стан файлів

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

  • Зафіксований, тобто файл збережений у локальному сховищі.
  • Змінене, коли виправлення було внесено, але збереження ще не виконано.
  • Підготовлене – змінені файли, які позначені для збереження.

Так, у проектах, у яких використовується Git, є три розділи для різних станів файлів:

  • Каталог Git, де зберігаються метадані та база даних об'єктів. Ця частина системи найважливіша.
  • Робочий каталог, який є витягнутою з бази даних копією якоїсь версії проекту.
  • Файл, який містить інформацію про подальше збереження.

Встановлюємо Git


Перше, що потрібно зробити для того, щоб використати систему контролю версій – встановити її. Існує кілька способів для цього. Основними є два варіанти:

  • Установка Git із вихідних джерел.
  • Встановлення пакета для платформи.

Установка Git із вихідних джерел

За наявності такої можливості краще використати цей варіант, оскільки буде отримана сама свіжа версія. Кожне оновлення зазвичай містить безліч корисних покращень, що стосуються Саме тому, якщо установка з вихідних джерел не дуже для вас скрутна, краще віддати перевагу її. Та й більшість дистрибутивів Linuxвключають застарілі пакети.

Для встановлення знадобляться необхідні бібліотеки: expat, curl, libiconv, openssl, zlib. Після їх встановлення можна завантажити останню версію системи контролю версій, скомпілювати її та встановити.

Встановлення в операційній системі Windows

Якщо користувач не має Linux, а хочеться використовувати Git, Windows також підтримує цю систему. І встановити її дуже просто. Існує проект msysGit, процедура встановлення якого є однією з найпростіших. Необхідно просто завантажити файл інсталятора, який можна знайти на сторінці проекту GitHub, а потім запустити його. Після закінчення установки на комп'ютері буде дві версії – графічна та консольна.

Початкове налаштування Git


Після того як система контролю встановлена ​​на комп'ютер, необхідно виконати деякі дії для налаштування середовища під користувача. Робиться це одного разу. Під час оновлення всі налаштування зберігаються. Їх можна буде змінити будь-якої миті.

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

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

Ім'я користувача

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

Якщо вказати опцію -global, такі параметри потрібно буде зробити один раз.

Вибір текстового редактора

Після вказівки імені потрібно вибрати редактор, який буде потрібний при наборі повідомлень у Git. За замовчуванням використовуватиметься стандартний редактор операційної системи. Якщо користувач захоче використовувати інший, потрібно прописати це в налаштуваннях конфігураційного файлуу рядку core.editor.

Перевірка параметрів

Щоб знати основи Git, необхідно вміти перевіряти налаштування, що використовуються. Для цього використовується config-list. Вона виводить усі доступні настройки, які зможе знайти. Деякі імена налаштувань можуть бути присутніми у списку кілька разів. Це відбувається через те, що Git зчитує один ключ із різних файлів. У такій ситуації для кожного ключа використається останнє значення. Є можливість перевіряти значення певних ключів, вписавши в команду замість "--list" - "(ключ)".

Як створити репозиторій

Досягти цієї мети можна двома способами. Перший полягає в імпорті в систему існуючого каталогу чи проекту. Другий – це клонування із сервера вже існуючого репозиторію.

Створення в даному каталозі

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

Клонування репозиторію

Для отримання копії існуючого репозиторію потрібна команда git clone. З її допомогою Git отримає копію багатьох даних із сервера. Це стосується всіх версій кожного файлу. Дуже зручна можливість, тому що у разі виходу з ладу сервера програміст зможе використовувати клон на будь-якому клієнті для повернення сервера в стан, в якому він був при клонуванні. Це схоже на точку відновлення.

Видалення файлу в Git

Видалити із системи будь-який файл можна, якщо виключити його з індексу, тобто з файлів, що відстежуються. Для цього потрібна команда git rm. Вона також прибирає файл із робочого каталогу користувача. Потім слід виконати коміт. Після нього файл просто зникне і відстежуватись більше не буде. Якщо він змінений і вже проіндексований, то застосовують примусове видалення з параметром -f. Такий спосіб запобігає видаленню тих даних, які ще не записалися в знімок стану і які не можуть відновити з системи.

Скасування змін

У будь-який момент може виникнути потреба у скасуванні будь-якої дії. Якщо користувач виконав коміт рано, забувши внести деякі файли, можна перевиконати його, використовуючи опцію --amend. Така команда використовує для коміту індексу. Якщо після виконання останнього збереження не було жодних змін, то проект буде в такому ж стані, і з'явиться редактор для коментарів, де користувач зможе відредагувати все, що потрібно. Потрібно пам'ятати, що не кожну операцію скасування можна буде скасувати. Іноді можна видалити необхідні дані. Слід бути уважними.

Підсумки


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

Вибір спеціальності- Справа серйозна і її не можна довірити нікому, Вам потрібно буде самостійно вникнути в суть і ухвалити рішення. Щоб вибрати спеціальність, постарайтеся знайти відповіді на такі запитання:

  1. Які мови програмування зараз найпопулярніші та чому?
  2. В якій галузі розробки використовуються ті мови, які вас зацікавили (web, mobile, game dev, enterprise, AI, science, etc) та яка з них для Вас найпривабливіша.
  3. До чого лежить душа? (це найголовніше!) Для відповіді на це запитання бажано подивитися безкоштовні відеоуроки різних авторів з різних мов програмування, шукати «своє».
  4. Скільки потрібно часу, щоб стати фахівцем? Для відповіді це питання потрібно скласти приблизний план навчання, консультуючись зі спеціалістами у цій сфері.
  5. Де і як навчатись за обраною спеціальністю?
Усі відеокурси

Як стати frontend розробником

Введення в спеціальність Frontend Developer, основні етапи створення сайтів, технічні вимоги до розробки, для чого потрібні основні технології, framework та бібліотеки.

SQL Essential

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

Верстальник сайтів

Верстальник сайтів– це спеціаліст, який займається створенням веб-сторінок.

Верстальник працює в команді з веб-дизайнером та програмістом. Спочатку дизайнер "малює" сайт - вигадує тему, має необхідні елементи на потрібних місцях. Після затвердження макету сайту за роботу береться верстальник. Він за допомогою різних елементів мови розмітки web-сторінки переводить графічні елементи дизайну (малюнки, шрифти, таблиці тощо) у зрозумілий для браузера формат. Можна сказати, що створює текстовий макет того, що придумав дизайнер. Після того, як сторінка зверстана і перевірена в різних браузерахНа правильність відображення вона передається в роботу програмісту, який підключає необхідний функціонал.

Для верстальника дуже важливо вміти робити верстку під різні "движки" web-сайтів, враховувати тип пристроїв, з яких користувачі заходитимуть на сайт. Верстку сторінок потрібно робити з урахуванням різного дозволуекранів та версій браузерів, дотримуватися певних стандартів.

Усі відеокурси

Створення адаптивного сайту з Bootstrap 3

Frontend Developer

За допомогою мови розмітки сторінок HTMLта каскадних таблиць стилів (СSS), ви зможете створювати дизайн web-додатків, інтерфейси сайтів, подавати інформацію у привабливому вигляді, приємному та зручному для користувачів. На Frontend-розробника також лягає частина відповідальності за рейтинг сайту, тому що чим зрозумілішим буде інтерфейс, чим більш підходящим способом будуть структуровані дані, тим більше часу користувач приділить сайту.

Знання CSS та HTML допоможуть розробнику зробити гарну статичну сторінку, але під час роботи з сайтом користувачам необхідно взаємодіяти з інформацією. Тому розробник повинен знати скриптову мову програмування JavaScript, яка робить web-сторінки функціональними та інтерактивними

Усі відеокурси

.NET Developer

C#/.NET розробник– це програміст, який використовує у своїй роботі технологію платформи.NET. Платформа Microsoft. NET Frameworkскладається з великої кількості інструментів для розробки та технологій, використовуючи які розробник може створювати різні типидодатків, від звичайних настільних додатків та сайтів, закінчуючи рішеннями для мобільних платформ та комп'ютерними іграми. В основі платформи Microsoft .NET Framework лежить мова програмування C#. Саме цю мову програмування у подробицях має освоїти .NET розробник.

Мова програмування C# більше десяти років займає лідируючі позиції у всіх рейтингах мов програмування. Так, як ринок праці активно розвивається, програмісти, які добре знають C# та технології.NET, є дуже затребуваними. .NET розробники здатні розвивати логічну послідовність команд для зв'язку з мережами, додатками та базами даних. Від них потрібне знання об'єктно-орієнтованого проектування та програмування з використанням систем, баз даних, а також мов програмування, які розробляють програмні програмис.NET Framework. Сюди входять знання та навички програмування мовою C#, XML та створення баз даних додатків, таких як Microsoft SQL Server.

Усі відеокурси

C# для професіоналів - Оновлений

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

Backend Developer

ASP.NET MVC Developer(або Backend Developer) – це спеціаліст, який створює веб-додатки використовуючи мову C# та технології платформи Microsoft .NET. До обов'язків такого розробника входить створення бізнес-логіки, яка обслуговує дії користувача на сторінці веб-сайту. Реєстрація користувача, пошук по сайту, виведення даних на сторінку з бази даних, робота з кошиком товарів в інтернет-магазині – приклади завдань, які вирішує Backend Developer.

До цієї спеціальності входить ряд курсів, які допоможуть освоїти як мову програмування C# так і необхідні технології платформи Microsoft .NET для створення веб-додатків.

Усі відеокурси

ASP.NET Базовий

Основи створення веб-додатків. Розуміння життєвого циклу сторінки, способи зберігання стану у веб-додатку та принципи прив'язки даних. Відео уроки сконцентровані на налаштуванні серверних елементів керування – головних будівельних блоків сторінки в програмах ASP.NET.

ASP.NET Поглиблений

Архітектура IIS сервера, життєвий циклвеб-додатки, HTTP обробники та HTTP модулі. Ви будете краще розуміти WebForms і легко вникати в принцип роботи інших веб технологій платформи ASP.NET.

Java Developer

Java Developer– це спеціаліст, основним завданням якого є створення складних корпоративних системдля обробки даних До таких систем можна віднести веб-сервіси, хмарні сховищаданих, веб-програми, а також складні банківські системи.

Java – об'єктно-орієнтована строго-типімізована мова програмування з С-подібним синтаксисом, яка найбільш близька до C++ та C#. У Java є як свої переваги, так і недоліки. Враховуючи той факт, що для запуску Java-додатків використовується спеціальна віртуальна машина, то програми запускаються повільніше, ніж у випадку з C++, але ця віртуальна машина дозволяє запускати програми на тій операційній системі, де вона встановлена, що забезпечує залежність від платформи. Java має безліч бібліотек і фреймворків, які дозволяють розробляти власні програми швидше.

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

Якщо ви вирішили стати PHP розробником, почніть навчання з:

  • вивчення основ синтаксису SQLщоб вміти проектувати базу даних для невеликого проекту;
  • відеокурсу по HTML та CSS, який необхідний для самостійної верстки сторінки;
  • також рекомендуємо вивчити синтаксис JavaScript - таким чином ви зрозумієте, як працюють події, що таке замикання і як влаштований AJAX
  • після цього переходьте до PHP – на ITVDN це курси PHP Starter та PHP Essential
  • потім вивчіть PHP фреймворк YII2
Усі відеокурси

Python Developer

Python- Це високорівнева мова програмування загального призначення, орієнтована на підвищення продуктивності та читання коду.

На сьогоднішній день Python є однією з найпопулярніших мов програмування з широким охопленням сфер застосування. Останні 5 років він входить до ТОП-10 найпопулярніших технологій на ринку IT.

Відеокурс Python Starterє введенням у програмування «з нуля» і відмінно підійде програмістам-початківцям. У відеокурсі Python Essentialакцент зміщений на отримання фундаментальних знань про внутрішньому пристроїмови, принципи роботи інтерпретатора, ієрархії стандартних типів та причин тих чи інших архітектурних рішень у мові.

Можна виділити два напрями:

Перше – це програмістщо реалізує функціональність, що відповідає за роботу програми з базою даних. Цей фахівець повинен володіти інструментами своєї мови, які дозволяють організувати таку взаємодію. Наприклад, якщо використовується мова C#, необхідно володіти такими технологіями як ADO.NET та/або Entity Framework, а також LINQ to SQL, LINQ to Entities. Крім цього, звичайно, цей фахівець повинен володіти основами мови SQL, а точніше однією з реалізацій стандарту SQL, наприклад Transact-SQL.

Друге – це адміністратор, до завдань якого входить проектування бази даних, налаштування, управління, ефективне використання, оптимізація, забезпечення безпеки, міграція даних та інші. Такому спеціалісту не обов'язково знати прикладну мову програмування, але, в той же час, він повинен володіти глибшими знаннями в SQL, системах управління базами даних, знати специфіку архітектури та функціонування бази даних.

Усіх тестувальників можна розділити на 2 великі групи за рівнем підготовки Manual QA Engineerі Automation QA Engineer.

Професія тестувальника ідеально підійде дуже відповідальним, уважним людям, які надають значення деталям, відрізняються усидливістю і трохи «страждають» на перфекціонізм. Для початку роботи у цій сфері необхідно володіти знаннями циклу розробки ПЗ, вивчити теорію та основні інструменти тестування та мати гарний рівеньанглійської.

Програма QA курсу на ресурсі ITVDN розроблена таким чином, що студент отримує всі необхідні знання та практичні навички для початку своєї кар'єри тестувальника. Курс дозволить вивчити основи, які є "must have" для всіх тестувальників, незалежно від сфери тестування та продукту, який належить тестувати. Закінчивши його, ви вже зможете розпочати кар'єру та отримувати реальний досвід на фрілансі.

Усі відеокурси

Project Manager

Project Manager- це спеціаліст, який відповідає за успішне та якісне виконання проекту у вказані замовником терміни.

Головний обов'язок та відповідальність PM - довести ідею замовника до реалізації у встановлений термін, використовуючи наявні ресурси. В рамках даного завдання PM'у необхідно побудувати план розробки, організувати команду, налаштувати процес роботи над проектом, забезпечити зворотний зв'язок між командою та замовником, усувати перешкоди у роботі команди, здійснювати контроль та постачання продукту у строк.

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

На ITVDN ви знайдете відеокурс з Управління проектами та продуктами «Вступ до Project Management». Він допоможе вам сформувати правильне уявлення про роль спеціаліста з управління проектами, дасть розуміння обсягу робіт, відповідальності та кола завдань. Відеокурс підходить для вивчення студентам IT та управлінських спеціальностей, менеджерам проектів та команд, бізнес-аналітикам та Product Manager-ам, HR, рекрутерам, Sales/BD менеджерам.

Давайте розберемося, " що таке система контролю версій” (VCS), і чому він такий важливий. А також, розберемо системи контролю версій порівняння.

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

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

Простим прикладом використання контролю версії може стати банальне копіювання файлів в окрему директорію (можливо навіть з позначкою за часом). Такий підхід дуже поширений і в той же час дуже схильний до появи помилок (можна скопіювати не ті фали, запутатися в директоріях і внести зміни не туди). Для вирішення цієї проблеми, використовують локальні SVC (локальні ВКВ) З простою базою даних, в яку записуються всі зміни у файлах.

Приклад локальної системи контролю версій RCS.

Централізована система контролю версій SVN (Subversion), CVS та Perforce

При взаємодії з іншими розробниками вже не підійде використання локальної системи контролю версій. Для цього придумали новий тип ВКВцентралізовану систему контролю версій (ЦСКВ). Такі системи мають єдиний сервер, який містить усі версії файлів, а клієнти отримують ці файли. Прикладами ЦСКВ є SVN система контролю версій (Subversion), CVSі Perforce.


Усі розробники ЦСКВзможуть (якоюсь мірою) дізнатися, чим займаються інші розробники. Адміністратори мають повний контроль над проектом: мають можливість контролювати, хто і що може робити.

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

Децентралізована система контролю версій Git, Mercurial, Bazaar, Darcs

Щоб вирішити проблему централізованих SVN, використовують дрогой тип ВКВ. Децентралізована VCS (ДСКВ)— клієнти повністю копіюють репозиторій замість простого завантаження знімка всіх файлів (стану файлів у певний момент часу). У цьому випадку, якщо сервер вийде з ладу, то клієнтський репозиторій можна буде скопіювати на інший, робочий сервер, адже даний репозиторій є повним бекапом всіх даних.

Система контролю версій ( Version Control System, VCS) є програмне забезпечення, яке дозволяє відслідковувати зміни в документах, при необхідності виробляти їх відкат, визначати, хто і коли вніс виправлення тощо. У статті розглянуто види VCS, принципи їх роботи, а також наведено приклади програмних продуктів.

Що таке система контролю версії?

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

Для вирішення таких проблем використовується система контролю версій, вона дозволяє комфортно працювати над проектом як індивідуально, так в колективі. VCSвідстежує зміни у файлах, надає можливості для створення нових та злиття існуючих гілок проекту, здійснює контроль доступу користувачів до проекту, дозволяє відкочувати виправлення та визначати хто, коли та які зміни вносив у проект. Основним поняттям VCSє репозиторій ( repository) – спеціальне сховище файлів та папок проекту, зміни в яких відстежуються. У розпорядженні розробника є так звана "робоча копія" ( working copy) проекту, з якою він безпосередньо працює. Робочу копію необхідно періодично синхронізувати з репозиторієм, ця операція передбачає відправку до нього змін, які користувач вніс до своєї робочої копії (така операція називається commit) та актуалізацію робочої копії, у процесі якої до користувача завантажується остання версіяз репозиторію (цей процес носить назву update).

Централізовані та розподілені системи контролю версій

Системи контролю версій можна розділити на дві групи: розподілені та централізовані.

Централізовані системи контролю версій

ЦентралізованіСистеми контролю версій являють собою програми типу клієнт-сервер, коли репозиторій проекту існує в єдиному екземплярі і зберігається на сервері. Доступ до нього здійснювався через спеціальну клієнтську програму.Як приклади таких програмних продуктів можна навести CVS, Subversion.

CVS (Concurrent Versions System, Система одночасних версій) одна з перших систем, що набули широкого поширення серед розробників, вона виникла в кінці 80-х років минулого століття. В даний час цей продукт не розвивається, це в першу чергу пов'язано з низкою ключових недоліків, таких як неможливість перейменування файлів, неефективне їх зберігання, повна відсутність контролю цілісності.

Subversion (SVN) - система контролю версій, створена на заміну CVS. SVNбула розроблена у 2004 році і досі використовується. Незважаючи на багато переваг у порівнянні з CVSу SVNвсе-таки є недоліки, такі як проблеми з перейменуванням, неможливість видалення даних із сховища, проблеми в операції злиття гілок тощо. В цілому SVNбув (і залишається) значним кроком уперед порівняно з CVS.

Розподілені системи контролю версій

Розподілені системи контролю версій ( Distributed Version Control System, DVCS) дозволяють зберігати репозиторій (його копію) у кожного розробника, що працює із цією системою. При цьому можна виділити центральний репозиторій (умовно), в який будуть відправлятися зміни з локальних і з ним ці локальні репозиторії будуть синхронізуватися. При роботі з такою системою користувачі періодично синхронізують свої локальні репозиторії з центральним і працюють безпосередньо зі своєю локальною копією. Після внесення достатньої кількості змін до локальної копії вони (зміни) надсилаються на сервер. У цьому сервер, найчастіше, вибирається умовно, т.к. у більшості DVCSнемає такого поняття як “виділений сервер із центральним репозиторієм”.


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

Почнемо з Mercurial, ця система є вільною DVCS, яка побудована таким чином, що в ній відсутнє поняття центрального репозиторію, для роботи з цією VCSвикористовується (як правило) консольна утиліта hg. Mercurialмає всі можливості системи контролю версій, такими як розгалуження, злиття, синхронізація з іншими репозиторіями. Цей проект використовують і підтримують велику кількість великих розробників, серед них Mozilla, OpenOffice, OpenJDKі багато інших. Сам продукт написаний мовою Pythonта доступний на більшості сучасних операційних систем ( Windows, Mac OS, Linux), також існує значна кількість утиліт з графічним інтерфейсомдля роботи з Mercurial. Основним конкурентом Mercurialна ринку розподілених систем контролю версій є Git, який, на сьогоднішній день, виграв гонку за лідерство

Git– розподілена система контролю версій, розроблена Лінусом Торвальдсем для роботи над ядром операційної системи Linux. Серед великих проектів, у яких використовується git, можна виділити ядро Linux, Qt, Android. Gitвільний та поширюється під ліцензією GNU GPL 2 і, також як Mercurial, доступний практично на всіх операційні системи. За своїми базовими можливостями gitсхожий Mercurial(та іншими DVCS), але завдяки ряду переваг (висока швидкість роботи, можливість інтеграції з іншими VCS, зручний інтерфейс) і дуже активній спільноті, що сформувалася навколо цієї системи, gitвийшов у лідери ринку розподілених систем контролю версій.Необхідно відзначити, що незважаючи на велику популярність таких систем як git, великі корпорації, подібні Google, використовують свої VCS.

Це була вступна лекція з систем контролю версій. Надалі, весь виклад стосуватиметься тільки git.

Усі ви знаєте систему Git. Хоча б чули – це напевно. Розробники, які користуються системою, її або люблять, або лають за складний інтерфейс та баги. Система управління версіями Git де-факто є стандартом у промисловості. Розробник може мати думки про переваги Mercurial, але найчастіше доводиться миритися з вимогою вміти користуватися Git. Як у будь-якої складної системи, вона має безліч корисних і необхідних функцій. Проте, до геніальної простоти дістаються в повному обсязі, тому існуюча реалізація залишала простір для вдосконалення.

Простими словами - хитромудрим додатком було важко користуватися. Тому в лабораторії Массачусетського Технологічного Інституту взялися за покращення та відсікли всі «проблемні елементи» (адже те, що для одного проблема, для іншого легко може бути перевагою). Покращену та спрощену версію назвали Gitless. Її розробляли з урахуванням 2400 питань, пов'язаних з Git та взятих із сайту розробників StackOverflow.

Що не так з Git

Багато користувачів скаржилися, що Git потребує нового інтерфейсу. Фахівці навіть склали документ Що не так із Git? Концептуальний аналіз дизайну. Автори: S. Perez De Rosso та D. Jackson.

Приклад

git checkout< file >// відкинути всі зміни в одному файлі з останнього вивантаження в систему git reset --hard// відкинути всі зміни у всіх файлах з останнього вивантаження в систему
Ці два рядки - одна з ілюстрацій того, як сильно Git потребував удосконаленого інтерфейсу. Дві різні команди однієї функції з однією різницею у цьому, що одна для одиночного файла, а друга - для безлічі файлів. Частина проблеми також у тому, що ці дві команди насправді не роблять точно одне й те саме.

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

Коротке порівняння базових функцій із попередньою версією

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

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

Функція staging індексує зміни, внесені до файлу. Якщо ви помітили файли staged, Git розуміє, що ви підготували їх до розвантаження.

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

Автор керівництва Gitless повідомляє, що проблема з'являється при перемиканні між гілками. Може бути складно запам'ятовувати який із stashes де знаходиться. Та й вершиною всього цього стало те, що функція не допомагає у випадку коли ви в процесі мерджу, що включає конфліктні файли. Така думка Переза ​​де Россо.

Завдяки Gitless ця проблема вирішується. Гілки стали повністю автономними по відношенню одна до одної. Це робить роботу набагато простіше і дозволяє розробникам уникати плутанини, коли необхідно постійно перемикатися між завданнями.

Збереження змін

Gitless ховає область стадій загалом, що робить процес прозорішим і менш складним для користувача. Для вирішення завдань є набагато гнучкіші команди «commit». Причому вони дозволять робити такі дії як виділення сегментів коду для комміту.


Крім цього, ви можете змінити класифікацію будь-якого файлу на значення: відстежуваний, не відстежуваний або ігнорований. Не має жодного значення, чи існує цей файл у заголовку чи ні.


Розгалуження процесів розробки

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


Простіше кажучи, у версії Gitless вам не потрібно пам'ятати про незавантажені в систему зміни, які перебувають у конфлікті зі змінами у гілці призначення.


Також ви зможете відкласти вирішення конфліктної ситуації, якщо у вас є середина мержда або fuse. Конфлікт залишиться доки ви не перемкнетеся назад.


Робота з віддаленими репозиторіями

Ось синхронізація з іншими репозиторіями відбувається в обох програмах однаково.


Ще одна перевага нової версії – можливість перемикатися до старої без втрати коду. При цьому ваші колеги можуть бути навіть не в курсі того, що ви користуєтеся іншим ПЗ.

Посібник з роботи з Gitless ви можете вивчити на офіційному сайті програми. У документації описано таке: як створювати репозиторій, зберігати зміни; як працювати з гілками; як користуватися тэгами, працювати з віддаленими репозиторіями.

Що в результаті

Вийшов додаток, який зберігає функціонал Git, але в той же час став більш простим у вивченні та використанні команд розробки. Насправді і до Gitless вже були спроби покращити Git. Але за словами Філіпа Гуо (він асистент професора когнітивної науки в Каліфорнійському університеті Сан-Дієго) ця версія вперше досягла цілей щодо перетворення інтерфейсу та дійсного вирішення головних проблем.
Проект використав суворі методи створення програмного забезпечення. Це необхідно для відокремлення недоліків в одному з найбільш широко застосовуваних у всьому світі програмних проектів. У минулому безліч користувачів наводили смішні аргументи як за, так і проти Git, але вони не були засновані на науковому підході.

На прикладі Gitless стає очевидним, що підхід спрощення можна застосовувати і до інших складних систем. Наприклад, Google Inbox та Dropbox.