Чому я повинен використовувати контроль версій? [зачинено]


123

Я читав блог, де письменник сказав це

"Код не існує, якщо його не встановлено в системі контролю версій. Використовуйте контроль версій для всього, що ви робите. Будь-який контроль версій, SVN, Git, навіть CVS, освоюють його та використовують його."

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

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

Це основна ідея цього чи я розумію це зовсім неправильно?

Якщо я маю рацію, то, можливо, це буде не дуже корисно, якщо я:

  • Не майте інших людей, які працюють над кодом.
  • Не плануйте давати код іншим.

4
ти маєш на увазі, що ти читав "кодування жаху" ...
Джейсон,

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

4
Руки вгору, хто не поділяє сором Мартинго. :)
витрачається

4
Хтось показує @TimEckel бісекцію, де контроль версій магічним чином вказує на зміну трьох рядків від трьох місяців тому і каже, що "помилка тут була введена". Розум = роздутий.
Джонатан Хартлі

5
@TimEckel, ви все ще використовуєте контроль версій, інший тип із меншими можливостями.
Абхінав Гауніял

Відповіді:


261

Ти коли-небудь:

  • Внесли зміни в код, зрозуміли, що це помилка, і хотіли повернути назад?
  • Загублений код або була резервна копія, яка була занадто стара?
  • Довелося підтримувати кілька версій продукту?
  • Хотіли побачити різницю між двома (або більше) версіями вашого коду?
  • Хотіли довести, що певна зміна порушила чи виправила фрагмент коду?
  • Хотіли переглянути історію якогось коду?
  • Хочете внести зміни до чужого коду?
  • Хочете поділитися своїм кодом чи дозволити іншим працювати над вашим кодом?
  • Хотіли подивитися, скільки роботи робиться, і де, коли і ким?
  • Хотіли експериментувати з новою функцією, не втручаючись у робочий код?

У цих випадках, і без сумніву в інших, система контролю версій повинна полегшити ваше життя.

Помилково сказати другові: цивілізований інструмент для цивілізованого віку.


20
Цей хлопець прибив її. Навіть коли я працюю над проектами, я вважаю за краще працювати з контролем версій. Повноправна демонстраційна програма Perforce для 2 користувачів чудово підходить для цього.
Альмо

3
звучить корисно .. доки мені не доведеться вчитися та опановувати це. хе
калійний

7
Хороші бали. Однак зауважте, що керування версіями - це не резервне копіювання! Резервна копія зберігається на окремій системі / носії інформації та зберігає старі резервні копії на деякий час (про всяк випадок, якщо ваш сховище якось перекрутиться).
sleske

1
Не можу погодитись більше sleske. Ось чому, поряд із нашою стандартною резервною копією VM та нічною верифікацією сховищ, я зберігаю дзеркальне сховище, яке синхронізується щогодини, а також резервне копіювання та перевірку :) Ми використовуємо Subversion і визнали, що svnedge є хорошим продуктом.
si618

7
Привіт Тіме, як ти відстежуєш історію змін? Як ви пов’язуєте історію змін з відстежувачем проблем або випуском приміток? Як вам керувати об'єднанням різних гілок коду? Як ви знаходите зміни, внесені вами в останніх 100 версіях? Можливо, якщо ви введете один код або ніколи не переймаєтесь тим, чому ви змінили код, то, можливо, достатньо мати резервну копію, але я обділяюся, що коли ви використаєте гідний VCS, ви зрозумієте, чому так багато людей ними користуються.
si618

56

Навіть якщо ви працюєте поодинці, ви можете скористатися контролем над джерелами. Серед інших, з цих причин:

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

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

  • Ви можете переглянути попередні версії коду, щоб дізнатися, коли і де були введені помилки. git bisectчудово в цьому плані.

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

  • Ви можете бачити "що змінилося". Це може здатися базовим, але це те, що я багато перевіряю. Я дуже часто починаю свою одноосібну роботу з того, що я робив вчора?

Просто продовжуйте і спробуйте. Почніть повільно з основних функцій і вчіть інших, як ви йдете. Незабаром ви побачите, що ніколи не захочете повертатися до "темних віків" без ДКС.

Якщо ви хочете локальний VCS, ви можете налаштувати свій власний сервер підривної роботи (що я робив у минулому), але сьогодні я рекомендував би його використовувати git. Набагато простіше. Просто cdу свій каталог коду та запустіть:

git init

Ласкаво просимо в клуб.


це звучить приємно, тож він може бути локальним і не повинен бути в Інтернеті, щоб хтось бачив? Я використовую дизайнер php, мені це подобається, і він має інтеграцію для Tortoise SVN, не впевнений, чи це добре
JasonDavis,

1
просто використовуйте що-небудь взагалі для початку - потім через деякий час, коли ви трохи знаєте, прочитайте альтернативи та спробуйте одну з них, потім іншу тощо
1800 ІНФОРМАЦІЯ

5
+1 за кулю про те, що ніколи не коментувати код
Ед Схембор

2
@jasondavis у відповідь на ваші конкретні запитання (навіть якщо ви, мабуть, знаєте на даний момент), ви можете використовувати будь-який розподілений VCS (git, mercurial тощо) локально, без сервера. Ви також можете використовувати централізований VCS (CVS, SVN тощо) на місцевому рівні, але налаштовувати його буде набагато прикро, і це не принесе великої користі. Незалежно від VCS, який ви використовуєте, ви можете мати його на сервері і все ще не мати його загальнодоступним (корисно для передачі між комп’ютерами та надання іншого резервного копіювання) - шукайте "приватний сховище". Ви не можете використовувати TortoiseSVN з git, але там є Tortoise-Git.
naught101

18

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

Ви, мабуть, використовуєте керування версіями прямо зараз, навіть якщо ви цього не знаєте. Чи є у вас папки, на яких написано "XXX Php Code (грудень)" або "XXX.php.bak.2"? Це вже форми контролю версій. Хороша система управління версіями подбає про це за вас автоматично. Ви зможете повернутися до будь-якого моменту часу (щоб у вас були зареєстровані дані) та зможете побачити точну копію цих даних.

Крім того, якщо ви прийняли таку систему, як субверсія, і використовуєте віддалене сховище (наприклад, таке на власному сервері), вам буде місце зберігати весь код. Потрібна копія коду десь в іншому місці? Немає проблем, просто перевірте це. Збій жорсткого диска в домашніх умовах? Не проблема (принаймні зі своїм вихідним кодом).

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


16
... або «Копія Копія Копія MyWork»
марнотрат

1
@spender: Саме це я пам’ятаю з темних днів, перш ніж я почав використовувати контроль версій :-)
Роберт Венаблес,

Це звучить дуже корисно, і мій поточний проект дещо великий, принаймні 150-200 файлів, як це працює, я чую "версію" лань, що означає, як версія 1 і версія 2, якщо збільшення кількості, що, якщо я зміню 1 файл, а не інше, чи будуть у мене 200 копій немодифікованого коду чи просто копії файлу, які змінені?
JasonDavis

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

1
Я пройшов шлях, щоб виправити коментар над собою: контроль версій не обов'язково зберігає дельту, але і представляє версію як дельта.
henrebotha

14

Навіть працюючи на самоті, це коли-небудь траплялося? Ви запускаєте додаток, і щось не працює, і ви говорите "що працювало вчора, і я клянусь, що не торкнувся цього класу / методу". Якщо ви регулярно перевіряєте код, швидка версія diff показує, що саме змінилося за останній день.


Або я просто витягаю останню версію зі своїх резервних копій, які створюються щоразу, коли я зберігаю файл.
Тім Еккель

@TimEckel та деякі інші люди просто повертають свої зміни :)
Abhinav Gauniyal

13

Ось сценарій, який може проілюструвати корисність управління джерелами, навіть якщо ви працюєте в самоті.

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

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

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

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

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

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

Для сольної роботи рекомендується Subversion або Git. Будь-хто вільний віддати перевагу тому чи іншому, але це явно краще, ніж не використовувати будь-який контроль версій. Хорошими книгами є " Прагматичний контроль версій за допомогою Subversion, 2-е видання " Майка Мейсона або " Прагматичний контроль над версіями за допомогою Git " Тревіса Свічегуда.


Оригінальний автор: Білл Карвін


10

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

Це як гігантська кнопка "скасувати" повністю до першого рядка коду.


7

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

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


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

5

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


3

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

Мій особистий фаворит - git.


3

Існує ряд причин використовувати контроль версій, навіть якщо ви єдина людина, яка коли-небудь торкнеться коду.

  • Резервне копіювання - що робити, якщо ваш жорсткий диск виходить з ладу? У вас є копія де-небудь?
  • Історія редагувань - Чи зберігаєте ви в даний час копії коду в різних папках? Контроль версій дає можливість відстежувати зміни з часом і легко відрізняти різні зміни, об'єднувати, відмовляти зміни тощо за допомогою інструментів.
  • Гілки - можливість перевірити деякі зміни, все-таки відстежувати, що ви робите, а потім вирішувати, чи хочете ви її зберегти і об'єднатися в основний проект чи просто викинути його.

Якщо ви тримаєте свій код під контролем версій, то це дуже легко зрозуміти, які файли ви змінили (або забули додати до базової лінії).


3

Щось, про що, схоже, ніхто ще не прямо не згадував, - це теґізація або маркування випусків. Якщо у вас є клієнт, який використовує версію 1 свого програмного забезпечення, і ви зайняті роботою над версією 2, що робити, коли клієнт повідомляє про помилку і вам потрібно створити версію 1.1?

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

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

Зазвичай одне з перших запитань, яке я задаю під час співбесіди на роботу, - це "Що ви використовуєте для контролю джерел?" Поки що лише одне місце сказало "Нічого", але вони планували виправити "Реал незабаром ..."


2

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

Ви можете бути єдиним розробником, але все одно виграєте:

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

Тепер, якщо у вас є група, що розвивається на одній і тій же базі кодової бази, контроль все ще потрібен

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

Коли задіяно більше людей, то більш актуально, який інструмент контролю версій ви виберете, залежно від стилю розробки.


1

Йдеться також про резервне копіювання старого файлу, тому його називають "Subversion". Таким чином, ви можете керувати декількома версіями вашої роботи, в якій ви можете повернутися назад (повернути) та керувати різною її реалізацією (розгалуженням).


1

Ви можете виявити, що у вас була робоча версія вашої програми.

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

Ви починаєте отримувати звіти про помилки, які впливають на якийсь код, який, на вашу думку, не торкаєтесь.

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

Контроль над джерелами має багато застосувань, навіть якщо ви єдиний розробник.


1

Здається, ви шукаєте щось трохи легше. Перевірте Mercurial ( дивовижний довідник ). Я використовую його для всього, від вихідного коду до особистої кореспонденції.

Деякі переваги:

  • Гігантська кнопка Скасувати, тож ви можете повернути ті дні, що минули тиждень минулого тижня, коли код фактично запустився
  • Викинути код. Не впевнені, чи це найкращий спосіб щось зробити? Складіть гілку та експериментуйте. Ніхто, крім вас, ніколи не повинен знати про це, якщо ви використовуєте DVCS як mercurial.
  • Синхронізований розвиток. Я розробляю на 4 різних комп’ютерах. Я натискаю і тягну між ними, щоб зберегти струм, так що незалежно від того, в якому я перебуваю, у мене є новітні версії.

1

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

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


1

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

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

Зі свого боку, я більше не зберігаю файли чи папки з назвою "project_old", коли я вирішую щось переробляти. Будь-які зміни, які я вношу, зберігаються поступово, і я завжди зможу зробити крок назад до проекту, який працював в цілому. Я рідко використовую FTP для розгортання зараз, тому що я просто перевіряю свій код через ssh. Завантажуються лише ті файли, які я змінив, і якщо мені потрібно перезавантажити сервер, термінал вже є.

Я вважав цю розмову на GIT справді повчальною; http://www.youtube.com/watch?v=4XpnKHJAok8

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


Але що робити, якщо щось порушується між комітами? Тоді ти загубишся. При використанні автоматизованих версій у вас ніколи не виникає такої проблеми, яка існує при використанні некорисних служб версій, таких як GitHub і подібних.
Тім Еккель

1
@TimEckel, що ви маєте на увазі під «порушити щось, що / не вчиняє»? Якщо я пишу щось після останнього фіксації та вношу нові зміни за допомогою непрацюючого коду, я просто повертаю свої зміни до останнього виконання. Так просто.
Абхінав Гауніял

@TimEckel сказати, що GitHub марний - це як сказати, що Linux марний - мільйони не погоджуватимуться з вами, але ви все одно це говорите, оскільки ви, очевидно, розумніші за ці мільйони, правда?
Шарле

1
@Charleh тільки тому, що мільйони використовують його, не означає, що це добре. Мільйони все ще використовують AOL та мають альбоми Брітні Спірс. Я використовую GitHub кожен день, і ненавиджу його кожен раз, коли я його використовую. Я не бачу в цьому потреби, вона перешкоджає і уповільнює справи.
Тім Еккель

0

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

Контроль джерела також корисний, коли ви заїжджаєте часто. Якщо ви заїжджаєте часто, ви завжди також будете в стані відкочувати часто. Багато разів ви могли почати спускатися одним шляхом, щоб вирішити проблему, а потім зрозуміли, що це неправильний шлях. Багато разів ви могли просто продовжувати гавкати неправильний шлях і в кінцевому підсумку будувати жахливе рішення - лише тому, що не хотіли втрачати всю свою роботу. Часто заїжджаючи, остання точка "щастя" не за горами, тому навіть якщо ви підете неправильним шляхом, ви завжди можете відкотитися і спробувати ще раз і зробити більш елегантне і просте рішення. Що завжди добре, щоб ви могли зрозуміти і зберегти те, що ви написали в майбутньому.


0

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

Але пару тижнів тому я познайомився з другом, який писав величезний проект хобі самостійно. Він мав десять-двадцять примірників свого коду із суфіксами типу "X1", "X2", "test", "швидше" тощо.

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


-2

Настає 2019. У цю відносну пізню дату я зіштовхуюсь із запереченнями щодо використання Git; заперечення Я бачу тут деякі підвищення. Ця дискусія значно прояснила необхідність використання управління джерелами, а не просто створення названих резервних копій. Одним із ключових моментів є використання джерела контролю навіть там, де у нас є окремі проекти розробників. Ніхто не ідеальний. Ви робите помилки. Якщо ви надзвичайно добрі та розумні, ви будете розробляти більш складні додатки; але ти все одно будеш робити деякі помилки, і це справляється. Гет о Піт! Я ніколи не використовую Linux, але думаю, що всі ми поважаємо велику технічну розвідку Лінуса Торвальда. Він визнав важливість контролю над джерелами і вніс ключовий внесок у створення Git. Це підсумковий момент з усіх наведених тут причин. Торвальдс отримує це: контроль над джерелом дуже важливий: використовувати джерело управління. Дякуємо всім, хто прокоментував цю тривалу тему.

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