Я починаю новий розподілений проект. Чи варто використовувати SVN або Git, і чому?
Я починаю новий розподілений проект. Чи варто використовувати SVN або Git, і чому?
Відповіді:
SVN - це одне репо і багато клієнтів. Git - це репо з великою кількістю репортажів клієнтів, кожен з яких має користувач. Це децентралізовано до того моменту, коли люди можуть відстежувати власні редагування на місцевому рівні, не потребуючи натискання речей на зовнішній сервер.
SVN розроблений таким чином, щоб бути більш центральним, коли Git базується на кожному користувачі, який має власну рето Git, а ці репортажі змінюють зміни назад у центральний. З цієї причини Git надає особам кращий локальний контроль версій.
Тим часом у вас є вибір між TortoiseGit , GitExtensions (і якщо ви розміщуєте свій "центральний" git-сховище в github, їх власний клієнт - GitHub для Windows ).
Якщо ви хочете вийти з SVN, ви можете трохи оцінити Bazaar . Це одна з систем наступного покоління управління версіями, яка має цей розподілений елемент. Це не залежно від POSIX, як git, тому є вбудовані версії Windows, і вони підтримують деякі потужні бренди з відкритим кодом.
Але вам можуть навіть не потрібні подібні функції. Погляньте на особливості, переваги та недоліки розподілених VCS . Якщо вам потрібно більше, ніж пропозицій SVN, розгляньте одну. Якщо ви цього не зробите, можливо, ви захочете дотримуватися (в даний час) вищої інтеграції SVN на робочому столі.
Я ніколи не розумів цього поняття "git не є хорошим для Windows"; Я розвиваюся виключно під Windows, і у мене ніколи не було проблем з git.
Я б точно рекомендував git over subversion; його просто набагато більш універсальний і дозволяє "офлайн розвиток" таким чином, що підрив ніколи насправді не міг. Він доступний майже на кожній платформі, який можна уявити, і має більше можливостей, ніж ви, мабуть, коли-небудь використовуватимете.
Ось копія відповіді, яку я з тих пір видалив із дублюючого питання про Git vs. SVN (вересень 2009 р.).
Краще? Крім звичайного посилання WhyGitIsBetterThanX , вони різні:
один - центральний VCS, заснований на дешевій копії для гілок та тегів, інший (Git) - розподілений VCS на основі графіку змін. Див. Також Основні поняття VCS .
Ця перша частина породила кілька неправильно поінформованих коментарів, роблячи вигляд, що основна мета двох програм (SVN та Git) однакова, але вони реалізовані зовсім по-різному.
Щоб уточнити принципову різницю між SVN та Git , дозвольте перефразувати:
SVN є третім здійсненням перегляду контролю : RCS, то CVS і , нарешті , SVN управляти каталогами версіонірованних даних. SVN пропонує функції VCS (маркування та злиття), але його тег - це лише копія каталогу (наприклад, гілка, за винятком того, що ви не повинні "торкатися нічого до каталогу тегів"), і її злиття все ще складне, на даний момент засноване на мета -дані додано, щоб запам'ятати те, що вже було об'єднано.
Git - це управління вмістом файлів (інструмент, створений для об'єднання файлів), що перетворився на справжню систему управління версіями , засновану на DAG ( спрямованому ациклічному графіку ) комітетів, де гілки є частиною історії даних (а не самими даними). ), а теги - це справжні метадані.
Сказати, що вони не є «принципово» різними, тому що ви можете досягти одного і того ж, вирішити ту саму проблему, - це просто неправда на стільки рівнях.
Проте коментарі до цієї старої (видаленої) відповіді наполягали:
VonC: Ви плутаєте принципову різницю у впровадженні (відмінності є дуже принциповими, ми обоє чітко погоджуємося з цим) із різницею у призначенні.
Вони обидва інструменти, які використовуються для однієї і тієї ж мети: саме тому багато команд, які раніше використовували SVN, досить успішно змогли скинути його на користь Git.
Якби вони не вирішили ту саму проблему, ця заміна не існувала б.
, на що я відповів:
"замінюваність" ... цікавий термін ( використовується в комп'ютерному програмуванні ).
Звичайно, Git навряд чи є підтипом SVN.
Ви можете досягти однакових технічних особливостей (тег, гілка, об'єднання) з обома, але Git не заважає вам і дозволяє зосередитись на вмісті файлів , не замислюючись про сам інструмент.
Ви, звичайно, не можете (завжди) просто замінити SVN на Git ", не змінюючи жодного з бажаних властивостей цієї програми (правильність, виконане завдання, ...)" (що є посиланням на вищезазначене визначення замінюваності ):
Знову ж таки, їхня природа принципово інша (що потім призводить до різного впровадження, але це не суть).
Одні бачать керування редакцією як каталоги та файли, інші бачать лише вміст файлу (настільки, що порожні каталоги навіть не зареєструються в Git!).
Загальна кінцева мета може бути однаковою, але ви не можете їх використовувати однаково, а також не можете вирішити той самий клас проблем (за обсягом або складністю).
2 ключові переваги SVN, які рідко цитуються:
Велика підтримка файлів. Окрім коду, я використовую SVN для управління домашнім каталогом. SVN - єдиний VCS (розповсюджений чи ні), який не задихається в моїх файлах TrueCrypt (будь ласка, виправте мене, якщо є ще один VCS, який ефективно обробляє файли 500MB +). Це відбувається тому, що поточні порівняння передаються потоково (це дуже важливий момент). Rsync неприйнятний, оскільки не є двостороннім.
Часткове сховище (субдір) замовлення / реєстрація. Mercurial і bzr не підтримують це, і підтримка git обмежена. Це погано в командному середовищі, але неоціненно, якщо я хочу перевірити щось на іншому комп’ютері з домашнього режисера.
Просто мої переживання.
Провівши додаткові дослідження та ознайомившись із цим посиланням: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComppare_cb82.html
(Деякі витяги нижче):
Прочитавши все це, я переконаний, що Git - це шлях (хоча трохи кривої навчання існує). Я також використовував Git і SVN на платформах Windows.
Я хотів би почути, що мають сказати інші, прочитавши вище?
Я створив би сховище Subversion. Роблячи це таким чином, окремі розробники можуть вибрати, чи використовувати клієнтів Subversion чи клієнтів Git (з git-svn
). Використання git-svn
не дає всіх переваг повноцінного рішення Git, але це дає окремим розробникам великий контроль над власним робочим процесом.
Я вважаю, що мине Git так само добре, як і для Unix та Mac OS X (оскільки ви просили) пройде порівняно короткий час.
Subversion має чудові інструменти для Windows, такі як TortoiseSVN для інтеграції Explorer і AnkhSVN для інтеграції Visual Studio.
Найцікавіше: я розміщую проекти в Subversion Repos, але отримую доступ до них за допомогою команди Git Clone.
Будь ласка, читайте Програму з Git у проекті Google Code
Хоча Google Code споконвічно говорить про Subversion, ви можете легко використовувати Git під час розробки. Пошук "git svn" дозволяє припустити, що ця практика є широко поширеною, і ми також радимо вам експериментувати з нею.
Використання Git у сховищі Svn дає мені переваги:
backup/public
сховище svn, щоб інші могли перевіритиНасправді не відповідаю на ваше запитання, але якщо ви хочете отримати переваги розподіленого контролю за версією - це звучить так, як ви - і ви використовуєте Windows, я думаю, вам буде краще використовувати Mercurial, а не те, що Git як Mercurial має набагато кращу підтримку Windows. У Mercurial теж є порт Mac.
Якщо ваша команда вже знайома з програмними програмами для керування версіями та джерелами, такими як cvs або svn, я рекомендую вам дотримуватися SVN. Мені дуже зручно з svn, але для поточного проекту електронної комерції, який я роблю на django, я вирішив працювати над git (я використовую git у svn-режимі, тобто з централізованим репо, на яке я натискаю і тягну з метою співпраці принаймні з одним іншим розробником). Іншому розробнику зручно працювати з SVN, і хоча досвід інших може відрізнятися, ми обидва переживаємо справді поганий час для цього маленького проекту. (Ми обоє жорсткі користувачі Linux, якщо це взагалі має значення.)
Звичайно, ваш пробіг може змінюватися.
Безумовно svn
, оскільки Windows - у кращому випадку - громадянин другого класу у світі git
(див. Http://en.wikipedia.org/wiki/Git_(software)#Portability для отримання більш детальної інформації).
ОНОВЛЕННЯ: Вибачте за розірване посилання, але я відмовився від спроби змусити SO працювати з URI, що містять дужки. [посилання виправлено зараз. -ед]
Головне - Git - це розподілений VCS, а Subversion - централізований. Розподілені VCS трохи складніше для розуміння, але мають багато переваг. Якщо вам не потрібні ці переваги, Subversion може стати кращим вибором.
Інше питання - підтримка інструментів. Який VCS краще підтримується інструментами, які ви плануєте використовувати?
EDIT: Три роки тому я відповів так:
І Git наразі працює в Windows тільки через Cygwin або MSYS . Subversion підтримувала Windows з самого початку. Оскільки git-рішення для Windows можуть працювати для вас, можуть виникнути проблеми, оскільки більшість розробників Git працюють з Linux і не мали портативності на увазі з самого початку. На даний момент я віддаю перевагу Subversion для розробки під Windows. Через кілька років це може бути неактуальним.
Тепер світ трохи змінився. Git має хорошу реалізацію у Windows зараз. Хоча я не тестував на Windows (оскільки я більше не використовую цю систему), я впевнений, що всі основні VCS (SVN, Git, Mercurial, Bazaar) мають належну реалізацію Windows. Ця перевага для SVN відсутня. Інші пункти (централізований проти розподіленого та перевірка на підтримку інструменту) залишаються дійсними.
Я б вибрав SVN, оскільки він є більш поширеним і більш відомим.
Я думаю, Git буде кращим для користувача Linux.
Git ще не підтримується в Windows, а поки що не підтримується. Він оптимізований для систем Posix. Однак запуск Cygwin або MinGW дозволяє запустити Git успішно.
У наш час я віддаю перевагу Git над SVN, але це потребує певного часу, щоб подолати поріг, якщо ви родом із CVS, SVN-землі.
Я, мабуть, вибрав би Git, бо вважаю, що він набагато потужніший за SVN. Є дешеві хостинг послуг , доступних кодів , які працюють просто чудово для мене - ви не повинні робити резервні копії або будь - яких робіт по технічному обслуговуванню - GitHub є найбільш очевидним кандидатом.
При цьому я не знаю нічого про інтеграцію Visual Studio та різних систем SCM. Я думаю, що інтеграція зі SVN помітно краща.
Я використовував SVN давно, але щоразу, коли я використовував Git, я відчував, що Git набагато потужніший, легший і хоча трохи кривої навчання, але він кращий, ніж SVN.
Я зазначив, що кожен проект SVN, по мірі його зростання, стає дуже великим проектом, якщо його не експортують. З іншого боку, проект GIT (разом з даними Git) має дуже малу вагу.
У SVN я мав справу з розробниками від початківців до експертів, і новачки та посередники, здається, вводять файлові конфлікти, якщо вони копіюють одну папку з іншого проекту SVN з метою її повторного використання. Тоді як, я думаю, в Git ви просто скопіюєте папку і вона працює, тому що Git не вводить папки .git у всі свої папки (як це робить SVN).
Після довгого спілкування з SVN я, нарешті, думаю перенести своїх розробників і мене на Git, оскільки легко співпрацювати та об'єднувати роботу, а також одна велика перевага полягає в тому, що зміни локальної копії можуть бути здійснені стільки ж бажано, а потім, нарешті, за один раз відсувається до гілки на сервері, на відміну від SVN (де нам доводиться час від часу робити зміни в сховищі на сервері).
Хто-небудь, хто може допомогти мені вирішити, чи дійсно я повинен їхати з Git?
.svn
папка у кожному підкаталозі. Це "виправляє" помилку копіювання до того, як це станеться.
Зводиться до цього:
Чи буде ваш розвиток лінійним? Якщо так, то слід дотримуватися Subversion.
Якщо, з іншого боку, ваш розвиток не буде лінійним, це означає, що вам потрібно буде створити розгалуження для різних змін, а потім об'єднати такі зміни назад в основну лінію розвитку (відому Git як головну гілку), тоді Git зробить МНОГО більше для вас.
ви пробували Bzr ?
Це досить добре, кононічно (люди, які роблять Ubuntu) зробили це тому, що їм нічого не подобалося на ринку ...
Чи можу я розширити питання і запитати, чи Git добре працює на MacOS?
Відповідь на коментарі: Дякую за новину, я з нетерпінням чекав спробувати. Я встановлю його вдома на своєму Mac.
На YouTube є цікаве відео про це. Це від самого Лінуса Торвальдса: Goolge Tech Talk: Лінус Торвальдс на git
SVN здається хорошим вибором під Windows, на що вказують інші люди.
Якщо хтось із ваших розробників хоче спробувати GIT, він завжди може використовувати GIT-SVN, де репозиторій SVN відтворений у сховищі GIT. Тоді він повинен мати можливість локально працювати з GIT, а потім використовувати SVN для публікації його змін у головному сховищі.
Вам потрібно йти з DVCS, це як квантовий стрибок у керуванні джерелами. Особисто я використовую Monotone і його прискорений час розвитку не закінчується. Ми використовуємо його для Windows, Linux та Mac, і він був дуже стабільним. У мене навіть є будівельник, який робить нічні побудови проекту на кожній з платформ.
DVCS під час розповсюдження зазвичай означає, що ви створите центральний сервер саме для того, щоб люди підштовхували зміни до та з них.