Чому користувачі Git кажуть, що у Subversion немає всього вихідного коду локально?


23

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

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

Я не розумію. Я не прошу переоцінки одного проти іншого, окрім цього.


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

Відповіді:


69

Передумова, яку ви допитуєте, дійсно неправильна:

одна з головних переваг Git над Subversion полягає в тому, що Git надає локальний розробник весь вихідний код

І з Subversion, і з Git ви маєте свій вихідний код локально. З Git у вас є і вихідний код, і сховище на локальній машині.

Виходить щось подібне.

Підрив:

Ваш код <-> Репозиторій

Git:

Ваш код <-> Ваш локальний сховище <-> Віддалене сховище (... <-> інше віддалене репортаж тощо)

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

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

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


10
Це дуже приємна відповідь і дійсно вражає додому з "... ризикуйте порушити будівництво для інших людей або зазнати тривалого локального розвитку без будь-якого контролю джерел ..."
Чарльз Спрейберрі

1
@cspray: Дякую! Я впевнений, що є й інші переваги, але це найбільший біль, який я мав із Svn.
Горан Йович

git FTW (ще 8…)
Тревор Бойд Сміт

2
@DanNeely: Насправді це так - ОП запитав про те, що він десь прочитав, і відповідь - це просто неправда (див. Першу частину моєї відповіді) Друга частина - це лише пояснення того, що той, хто висунув претензію, ймовірно, хотів сказати і чому.
Горан Йович

1
@Giorgio: Спробуйте, і ви дізнаєтесь :) Серйозно, я не думаю, що мені ніколи не вдавалося це зробити без проблем (крім того, щоб зробити повністю ручне злиття, яке вражає призначення інструменту)
Горан Йович

17

Git або Mercurial зберігають весь сховище локально з усіма редакціями та названими гілками. Субверсія зберігає лише одну - зазвичай Head Revision. Тож за допомогою Git та Mercurial ви можете отримати доступ до повного сховища (тобто вашого поточного вихідного коду та його історії), навіть коли ваша мережа розбивається на SVN, ви обмежені останньою редакцією, до якої ви оновили.


1
@Murph Дякую Це було по суті те, що я мав на увазі. Я намагався уточнити.
Аменті

Це не лише питання, чи є у вас мережне підключення до сервера чи ні; локальний IO набагато швидший і менший затримки, ніж мережевий IO, що робить вивчення історії або звинувачення у файлі набагато швидше (попередження TrotiseSVN звинувачує "Будь ласка, зачекайте - це може зайняти кілька хвилин. Серйозно!"). Вигода полягає в тому, що наявність усієї локальної історії може зажадати набагато більше місця на диску у великих сховищах; це може бути проблематично для ноутбуків, якщо ви не можете просто додати додатковий диск, щоб доповнити менший SSD-диск, який не працює.
Dan Neely

@ Коментар DanNeely, ймовірно, був розумним у 2012 році, але через 4 роки майже неможливо знайти проект git, який може займати будь-яку значну частину SSD
Ігор Стоппа

7

Коротка відповідь така: з git у вас є весь ваш вихідний код, з підривною системою ви маєте всю останню версію свого вихідного коду.

Git зберігає копію всієї історії вашого сховища локально. З підривом вся історія знаходиться на сервері.


2

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

Ви правильно сказали, що у вас є вихідний код і з SVN, і з GIT, але з GIT не має бути централізованого сервера, який також містить вихідний код. Завдяки GIT ви можете бути ТІЛЬКОЮ людиною із вихідним кодом, але все ще зможете виконувати всі функції, які ви виконували б із типовим VCS.

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


1

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

Якщо ви натискаєте щодня, то ризик повинен бути невеликим. Але якщо ви змушені щодня вносити зобов'язання на SVN-сервер, то в кінці дня ви можете зробити все в одному великому наборі змін, який не розділяє кожну зміну на невеликі кроки. За допомогою git вам пропонується зробити кілька невеликих комітетів. При натисканні, якщо потрібне злиття, намагайтеся злитися і натиснути. Якщо ви не можете злитися на даний момент, ви можете перейти до нової гілки або іншого сховища на сервері.

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