Як використовувати контроль версій


19

Я розробляю веб-сайт в php в localhost, і коли його модулі завершуються, я завантажую його в хмару, щоб мої друзі могли його перевірити.

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

Отже, моє запитання: чи доступний мені простий спосіб / послуга / додаток для відстеження всіх редагувань / змін / нових файлів та управління файлами під час розробки веб-сайту. Як тільки я закінчу з модулем, я хочу завантажити його в хмару (я використовую Amazon Cloud Service). Якщо з новими файлами щось трапиться, я, можливо, захочу повернутися до старого файлу. І, можливо, за клік-два я побачу файли, які я редагував чи змінював після останнього завантаженого?


5
Є багато пропозицій щодо того, якою системою управління версіями користуватися, і чесно кажучи, всі вони краще, ніж ваш поточний "ручний" спосіб.
Йоган

Відповіді:


28

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

Для початку виберіть один із Mercurial, GIT або Bazaar у такому порядку та встановіть його разом із інструментами для вашої IDE та операційної системи (я віддаю перевагу Mercurial з HGE для Eclipse).

  1. Ініціалізуйте сховище зі свого робочого каталогу ( hg init з Mercurial).
  2. Вирішіть, які файли та каталоги ви хочете відстежувати, а які ні. Загальне правило - не відстежувати файли, що генеруються компіляторами та іншими інструментами.
  3. Використовуйте команду, щоб додати файли та каталоги до сховища ( hg add для Mercurial).
  4. Розкажіть інструменту про шаблони файлів, які ви не хочете відслідковувати (відредагуйте .hgignore для Mercurial).
  5. Виконайте зобов’язання відстежувати оригінальні версії ( hg ci ).
  6. Виконайте фіксацію після кожного логічного рубежу, навіть якщо він невеликий.
  7. Додайте нові файли під час їх створення.
  8. Повторіть останні два.
  9. Створюйте резервну копію робочого каталогу та сховища якомога частіше.

За допомогою ваших файлів у сховищі ви можете знати відмінності між будь-якими двома версіями файлу чи каталогу або повним проектом ( hg розл. ), Переглянути історію змін ( hg hist ) та відкатати зміни ( hg up -r ).

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

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

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

Лінус Торвальдс (який займається десятками тисяч файлів і мільйонами рядків коду в своїх проектах) розповів в Google про те, чому цей інструмент не може бути CVS, SVN або будь-яким із багатьох безкоштовних і комерційних файлів навколо ; це дуже варто переглянути.


1
Я також віддаю перевагу Меркуріалу. Мені подобається підтримка в Netbeans, тому що, коли ви кодуєте, вона показує вам кожен рядок, який змінився з моменту останньої передачі. Він також кодує кольори нових / змінених / незмінних файлів у дереві продукту. Які звуки люблять це було б корисно для ВП: I lose track of which file I've edited or changed. HGE також може це зробити, я цього не використовував.
JD Isaacks

1
+1 для опису процесу, а також частини способів використання інструментів для цього.
Стипендіати Доналу

Як побічне запитання, чи вважатиметься .xcodeprojфайлом, який Xcode використовує для iOS-проектів, чимось наказувати Mercurial ігнорувати, чи важливо тримати файл у синхронізації?
Кевін Яп

1
@Kevin Я не знаю про Xcode, але в останніх IDE та інструментах є окремі файли конфігурації для загальних речей проекту (мова та бібліотечні версії, правила форматування коду, залежності тощо) та налаштування користувачів (каталоги, де я розміщую речі, панель макет, шкури, розмір шрифту, особистий підпис). Перші можуть бути включені до сховища, якщо команда погодиться. Останнє не повинно включатись, оскільки оновлення зі сховища замінить ваші уподобання чужими, і це стає швидко дратівливим та контрпродуктивним.
Апалала

1
@John: NetBeans робить це для кожного VCS, який він підтримує. На даний момент це лише основна особливість IDE.
Майк Баранчак

13

Я б дуже рекомендував Git. Дізнайтеся про це тут: https://lab.github.com/

Якщо вам не подобається Git, є й інші рішення контролю версій. Ви можете перевірити SVN.


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

1
+1 Також врахуйте: люди вирішили перейти від svn (VCS) до git (DVCS - d = розподілений), але не з GIT до SVN (через вибір).
Майкл Дюрант

7

Це тільки ви ?, використовуйте DVCS

Як не інтуїтивно зрозуміло, дистрибутивована система управління версіями (mercurial, git, базар) краще починати з централізованої системи (svn, cvs). Чому ?, Ви встановлюєте його на свою машину і запускаєте своє сховище локально, і все. У такій централізованій системі, як svn, вам потрібно налаштувати клієнта та сервера ... а потім вам потрібно підключитися до сервера, щоб зберігати свої зміни.

За допомогою DVCS - це ви, локальний сховище, і якщо хочете, ви можете скористатися службою, на зразок bitbucket.org або github.com.

IMHO, mercurial - це дружніший і настільки ж здатний DVCS для початку.

Є інші ?, використовуйте DVCS!

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

введіть тут опис зображення

У вас з’являється щось подібне, коли всі просто здійснюють спеціальні дії:

введіть тут опис зображення

Кожен просто переживає за свою власну роботу під час версій (тобто не бігаючи на фіксацію) та не переживаючи про підключення до сервера просто для здійснення.

Удачі


1
+1 Дуже приємні приклади! Вам слід редагувати, щоб підкреслити відсутність болю у складних злиттях дерев із сучасними інструментами.
Апалала

5

Коротше кажучи, існує безліч альтернатив, серед яких найпопулярнішими є Subversion (SVN) та Git (таким чином, найпростіше знайти рішення в Інтернеті).

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

Припустимо, що у вас є Linux і хочете почати використовувати Git:

  1. Встановити Git
  2. Перейдіть до каталогу та виконайте команду 'git init'
  3. Дізнайтеся, як додати файли, перегляньте зміни, введіть їх ...
  4. ... і робити більш досконалі речі (перегляд журналів, відновлення змін, ігнорування файлів, створення гілок, об'єднання їх, створення та використання віддалених програм, використання підмодулів, використання підтримки SVN тощо).

Сподіваюся, це допоможе вам почати.


1
SVN не вимагає сервера, але він вимагає, щоб сховище було в каталозі, відмінному від робочого. SVN та CVS, як правило, застаріли на користь таких інструментів, як GIT та Mercurial, які не потребують підключення до мережі для щоденної роботи та не потребують центрального сховища для спільної та розподіленої розробки програмного забезпечення.
Апалала

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

Апалала, деяке питання: як Mercurial обробляє інформацію, який користувач автор конкретних змін? У Git ви можете змінити це та здійснити зміни як хтось інший, таким чином створивши певний безлад (є якась особливість, щоб відрізнити комідера від представника, але це недостатньо очевидно). Чи вирішив Mercurial цю проблему, пов'язану з розподіленою версією?
Тадек

2
@Tadeck Це не так, як Меркуріал і GIT працюють у моєму розумінні. У них одна людина відповідає за те, що потрапляє у сховище, будь то за допомогою комірок, витягувань або виправлень. Якщо у розповсюджених сховищах хтось має привілеї, то ви вже всім серцем довіряєте їм. Лінус Торвальдс це добре пояснює в цій розмові: youtube.com/watch?v=4XpnKHJAok8
Апалала

@Tadeck Що стосується SVN, то я його багато використовував, і, нарешті, думав, що це не є поліпшенням щодо CVS (який, принаймні, має звичайні сховища ASCII і є достатньо зрілим, щоб ніколи їх не пошкодити). Знову ж таки, Торвальдс це добре пояснює у відео, яке я пов’язував раніше. Неможливість роботи в режимі офлайн та неможливість об'єднання робить застарілі інструменти SCM застарілими.
Апалала

2

Як підказує Апалала, я рекомендую замовити hginit . Оскільки ви новачок у контролі версій, ви можете пропустити першу сторінку. Це повинно дати вам гарне інтро, після чого ви можете розмістити на SO , якщо у вас є конкретні питання.


0

Я буду суперечити думці більшості і рекомендую Subversion. Subversion проста у використанні, і це все, що потрібно людям та невеликим командам. Це зрілий продукт, тому кожен ІДЕ там має гарну підтримку. Так, він не має всіх особливостей Git. (Я ніколи не використовував Mercurial, тому не говорю про це.) Але більшості розробників насправді не потрібні додаткові функції.

Кілька сховищ? Я впевнений, що для них є законне використання, але я ніколи не стикався з ними.

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

Git полегшує справу з розгалуженням і злиттям. Але для одноосібної команди це не така вже й велика справа.

Щось у масштабі ядра Linux - так, використовуйте Git. Для решти нас Subversion є досить хорошою.


Нахил Особливості Git, які відсутні у SVN (такі як легке розгалуження та просте злиття), корисні, можливо, навіть важливі, як для малих проектів, так і для великих.
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser Так, на той час це було моєю думкою, але після професійного використання Git протягом декількох років я повинен був би погодитися з вами.
Майк Баранчак

Відмінно! Ви будете асимільовані. : D
Marnen Laibow-Koser

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