GIT проти Perforce - два VCS увійдуть ... один вийде [закрито]


85

Отже, я перебуваю у процесі продажу GIT на роботі. Перше, що мені потрібно, це переконати всіх, що GIT краще в тому, що вони вже звикли робити. В даний час ми використовуємо Perforce. Хтось ще пройшов через подібний продаж? Хороші посилання / поради?

Одним з найбільших виграшів є те, що ми можемо працювати з ним, відключеним від мережі. Ще одним виграшним IMO є спосіб обробки додавання / оформлення замовлення. Вітається більше балів! Також у нас є приблизно 10-20 розробників.

Відповіді:


75

В даний час вихідний код інтерпретатора Perl 5 переживає перетворення з Perforce на git. Можливо, git-p4rawімпортер Сем Вілена представляє інтерес.

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

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

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

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


Нібито p4sandbox надає деякі можливості роботи в режимі офлайн для p4. Тим не менше, я все ще люблю git. :)
Домінік Мітчелл

13
Git не забезпечує «автономні здібності», то є в автономному режимі. Ви надсилаєте дані лише за допомогою дроту, коли ви натискаєте коміти до джерела або витягуєте зміни з інших підрепозиторіїв.
Еван Плейс,

2
"Git настільки швидко, що твій капелюх полетить" люблю це :) Єдине, це не дуже вірно, коли ти починаєш реєструвати двійкові файли. великі репозиторії викликають клопоти в git.
v.oddou

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

84

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

  1. Швидкість розгалуження - git займає максимум кілька секунд.
  2. Конфлікти - автоматичне вирішення проблеми P4Merge знищило тижневий обсяг роботи один раз. З тих пір я волів би вирішувати вручну при злитті. Коли Git підказує мені про конфлікт, це насправді конфлікт. В інший час git правильно вирішує речі, і я економить купу часу.
  3. Відстеження злиттів - Якщо у вас є одна гілка, яка постійно отримує злиття з двох інших гілок, ви знаєте, який головний біль може бути у perforce. З git головний біль зведений до мінімуму, оскільки результат злиття git насправді є новим комітом, який знає, хто його предки.
  4. Дозволи - Я втратив кількість випадків, коли я намагався працювати з файлом, але не зміг, оскільки його не перевірили у Perforce. Якщо ви працювали з XCode (або будь-яким редактором, який не має надійного плагіна Perforce SCM) в автономному режимі, ви знаєте, наскільки це може дратувати. Мені не потрібно турбуватися про це з Git. Я вношу свої зміни. Git мене не зупиняє і відстежує їх у фоновому режимі.
  5. Дотримання основного дерева охайним - за допомогою git я можу сортувати свої коміти та впорядковувати код, щоб історія виглядала красивою та охайною. Жодне з того сміття "перевірки цього файлу, оскільки воно мало бути частиною попередньої реєстрації". Я кабачую такі вчинки, бо вони нікому не допомагають.
  6. Зберігання - Ваш сервер perforce повинен мати версію 2010.1 або новішу, щоб використовувати команду p4 shelve.
  7. Створення патчів - це легко зробити в git. Не знаю, чи можливо це у Perforce без використання командного рядка.
  8. Розсилки з графічного інтерфейсу - знову ж таки, git тут виграє.
  9. Місце на диску - завдяки perforce кожна гілка є копією. Це означає, що якщо ваше вихідне дерево величезне, ваш дисковий простір швидко з’їдається. Це навіть не враховуючи додатковий простір після початку будівництва. Чому взагалі існує зв’язок між гілками та дисковим простором? За допомогою git ви можете мати 100 гілок, і одночасно існує лише одна гілка. Якщо ви спеціально хочете працювати над двома версіями одночасно, ви можете клонувати, виконувати свою роботу, а потім позбутися одного клону, якщо хочете, не втрачаючи нічого.
  10. Якщо ви працюєте на XCode4, підтримку perforce було скасовано, а підтримка git вбудована. Якщо ви виконуєте крос-платформну роботу, як я, це має велике значення. За допомогою Visual Studio ви можете використовувати розширення git. З perforce це однаково важко для обох ОС. Ну, можливо трохи більше на mac зараз із XCode4 на сцені.
  11. Пошук помилкової реєстрації (або правил git bisect) - коли-небудь намагалися виконати двійковий пошук за допомогою perforce, щоб з’ясувати, де була введена помилка? Досить клопоту, так? Ще більше клопоту, коли в центрі були інтеграції з інших галузей. Чому? Тому що для таких завдань не існує автоматики. Вам потрібно написати свій власний інструмент, щоб поговорити з виконавцем, і у вас зазвичай немає часу. За допомогою git ви даєте йому вихідні точки ("хорошу" і "погану" точки), і це автоматизує пошук вас. Ще краще, якщо у вас є сценарій, який може автоматизувати процес побудови та тестування, ви можете підключити git до сценарію, і весь процес пошуку реєстрації буде автоматизований. Ось так повинно бути.
  12. Відстеження змін у рефакторах - Спробуйте розділити BigClass на SmallClass1 та SmallClass2. Що стосується Perforce, BigClass тепер перестав існувати, і два нових класи (SmallClass1 та SmallClass2 приєдналися до дерева джерел). Для Perforce немає ніякого відношення між BigClass та SmallClass1 та SmallClass2. Git, навпаки, досить розумний, щоб знати, що x% BigClass зараз перебуває у SmallClass1, а y% BigClass - у SmallClass2 і що BigClass припинив своє існування. Тепер, з точки зору того, хто переглядає зміни в декількох гілках, ви скажете мені, який підхід вам здасться більш корисним - Git's або Perforce. Особисто я віддаю перевагу підходу Git, оскільки він більш точно відображає фактичну зміну коду. Git може це зробити, оскільки відстежує вміст у файлі, а не сам файл.
  13. Централізована або децентралізована: Git - це система DVCS, тоді як perforce централізована. Централізований VCS не можна децентралізувати пізніше, але DVCS (особливо git) можна централізувати. Є кілька продуктів, які додають дуже дрібний контроль доступу до git, якщо це те, що потрібно бізнесу. Особисто я хотів би використовувати систему, яка надає мені більшу гнучкість у довгостроковій перспективі.
  14. Зіставлення гілок: Якщо ви хочете зробити розгалуження прямо в Perforce, вам потрібно створити відображення гілок. На це є причини, але вони пов’язані з тим, як Perforce осмислює галузь. Як розробник або команда, це просто означає ще один крок у робочому процесі, який я взагалі не вважаю ефективним.
  15. Спільне використання роботи між командами: за допомогою Perforce ви не можете розбити заявку. Команда A працює над функцією A. Команда B над функцією B. Команда C працює над виправленням помилок. Тепер командам A & B доводиться виправляти купу помилок, щоб реалізувати їх функції. Єдине, що вони не були настільки дисциплінованими під час внесення змін (можливо, тому, що вони поспішають до встановленого терміну), і тому їх "виправлення помилок" - це частини більших подань, які також містять нові речі, що стосується контролю версій їхніх занепокоєння. Однак команда C зараз робить точковий реліз і хотіла б отримати виправлення помилок від інших команд. Якщо вони використовували Git, команда C могла вибирати відповідні зміни інших команд, розділяти їх і брати лише те, що їм потрібно, не турбуючись про введення будь-яких частково реалізованих функцій. З Perforce,
  16. Зміна платформи - Якщо з якихось причин у майбутньому ви вирішите змінити свою обрану платформу, за допомогою Perforce ви перебуваєте на владі Perforce.com та наявності інструментів для обраної вами платформи.
  17. Зміна на майбутній дивовижний механізм керування джерелами X - Якщо ви вирішите змінити те, що ви використовуєте для керування джерелом, витягнення історії керування джерелом із Perforce та переміщення його до нової системи X стане кошмаром, оскільки це закрите джерело та найкращий Ви можете лише здогадатися - просто Google для перенесення Perforce to Git, щоб зрозуміти, про що я говорю. Принаймні з Git, його відкритим кодом, тому він виключає багато здогадок.

Ну, це мої 2 центи. На захист Виконавця я повинен сказати їх правила підтримки клієнтів, а також їх інструмент "Перегляд часу". Я не знаю, як отримати проміжок часу за допомогою git. Але для зручності та економії часу я б ходив із git будь-який день.


2
re # 6 (схованка): поличка p4, вона нова.
Трей

Дякую. Я оновив свою відповідь :)
Карл,

8
Найбільша різниця між Perforce та Git - це необхідний набір розуму. Якщо ви керуєте централізованим магазином VCS, git буде дійсно важким продажем, тому що він вимагає змін у способі, яким ви, ваша команда та бізнес думаєте про контроль версій. Іншими словами, git - це чудовий та ефективний інструмент, який технічно більш здатний, ніж Perforce. Найважча частина переконує людей :)
Карл,

1
Я закоханий у Perforce. Читати цю публікацію схоже на обман ...
KlausCPH

2
@KlausCPH, принаймні, вам не доведеться готувати промову про розрив відносин, коли ви вийдете з Perforce :)
Carl

46

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

Скільки розробників ви говорите про перехід?

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

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


18
Додам, що чудовий набір функцій Git коштує крутої кривої навчання. (Хоча я також ніколи не знаходив Виконавця так інтуїтивно.)
savetheclocktower

1
Чудова відповідь Тім. Джастін - чому твого боса продають? Напевно, ви, мабуть, звернулися до питання Тіма, щоб зробити це? Мене б також зацікавило виправдання.
Грег Вітфілд,

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

2
@Justin: Остерігайтеся причини "ми будемо використовувати лише основні функції". З git ви в кінцевому підсумку будете використовувати більш просунуті речі. Чому б вам не? Бісект спадає на думку відразу. Так само робіть перебазування та збирання вишні.
Carl

3
Власне, у нас відбулася відповідна бесіда в коментарях, яка закінчилася, щойно з’явилося підказка «Ви впевнені, що не хотіли б перенести це в чат», змусивши когось нарешті помітити, що це питання насправді не підходить для SO. По суті, це питання про те, чому одна система є "кращою" за іншу, і запрошує на це багато жвавих дискусій.
Адам Паркін

15

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

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

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


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

2
Цей коментар є технічно правильним, але це начебто втрачає суть. Системи контролю за ревізіями є соціальним інструментом. Соціально гілка з вашим іменем на спільному сервері не є "приватною", вона використовується. Так, навіть з ACL та будь-якими на місці. Є також технічні відмінності (очевидно, що моя приватна гілка git використовується, коли я їду додому, не маючи / ненадійного Інтернету), але вони пов'язані з соціальною різницею.
tialaramex

2
Приватна філія з perforce, просто відстій. Легкість створення та перемикання між гілками в git не можна порівняти з perforce. Як приватно насправді є виконавською "приватною" галуззю. Ви не тримаєте його локальним. Ви повністю залежате від доступу до мережі.
Ерік Енгхейм,

9

Команда, яка продала мене особисто на git, була навпіл . Я не думаю, що на сьогодні ця функція доступна в будь-якій іншій системі контролю версій.

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


1
Для справедливості (я вибрав git через Hg), слід зазначити, що Mercurial також має функцію дроблення - хоча він поставляється як плагін, який потрібно завантажувати явно.
Арістотель Пагальціс

2
darcs мав "відстеження" ще до існування git. Ранні версії, правда, були досить грубими.
wnoise

2
щодо інтерфейсу користувача - GitX на OSX чудовий.
Ентоні Стаббс,

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

1
З мого досвіду роботи з Git, вам дійсно потрібні як командний рядок, так і графічний клієнт, щоб ефективно використовувати його. Вам потрібен командний рядок, оскільки є багато потужності, яку непросто вкласти в графічний інтерфейс, і вам потрібен графічний інтерфейс (або принаймні git log --graph), оскільки історії ревізій Git мають тенденцію бути нелінійними та важко візуалізувати без зображення. Я використовую GitX і SourceTree в якості графічних інтерфейсів, хоча gitk (який зараз поставляється з Git) є прохідним.
Marnen Laibow-Koser

9

Які функції Perforce використовують люди?

  • Кілька робочих областей на одній машині
  • Нумеровані списки змін
  • Філії розробників
  • Інтеграція з IDE (Visual Studio, Eclipse, SlickEdit, ...)
  • Багато варіантів побудови
  • Складені робочі простори
  • Інтеграція одних виправлень, але не інших
  • тощо

Я запитую, тому що якщо всі люди роблять це отримати і поставити з командного рядка, git це охоплює, як і всі інші RTS.


2
Не впевнені, що означає "кілька робочих областей на одній машині" - інші VCS просто не мають поняття робочої області, тому насправді не можна рекламувати як особливість для Perforce. Інші мають сенс.
Billy ONeal,

Приклад декількох робочих областей: клієнт A має версію розробника та версію файлів, що містять лише A, та підмножину внутрішніх інструментів версії 1.52; клієнт B має розробляти та випускати лише файли B, а також інший, але перекривається набір внутрішніх інструментів, як dev, так і версії 1.52. Розробник працює над обома одночасно, і може зробити так, щоб змінені внутрішні інструменти були видимими для A, щоб побачити, що зламається.
Thomas L Holaday,

6
@Tomas: Чому б тобі ... Просто двічі перевірити? Виконавець повинен мати його як "функцію", оскільки в іншому випадку це стає дивним через необхідність забезпечити правильне встановлення змінних середовища, правильність записів реєстру тощо.
Arafangion

@Arafangion, не очевидно, як перевірка вдвічі сприяє вибірковій експозиції файлів для побудови наборів.
Thomas L Holaday

6

Очевидно, GitHub зараз пропонує компаніям навчальні курси по git . Цитували їхню публікацію в блозі про це :

За останні кілька тижнів я неодноразово відвідував кампус Google, допомагаючи тренувати Android там, у Git. Мене попросив Шон Пірс (ви можете знати його за його славою Git та EGit / JGit - він герой, який бере на себе підтримку, коли Хуніо не в місті), щоб я допоміг йому навчити інженерів Google, які працюють над Андріодом в процесі переходу від Perforce до Git , щоб Android міг ділитися з масами. Я можу сказати вам, що я був більш ніж радий це зробити.

[…]

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

Акцент мій.


4

Я використовую Perforce вже давно, а нещодавно я також почав використовувати GIT. Ось моя "об'єктивна" думка:

Виконати особливості:

  1. Інструменти графічного інтерфейсу, здається, мають більше можливостей (наприклад, проміжок часу, графік ревізій)
  2. Швидкість під час синхронізації з версією голови (без накладних витрат на передачу всієї історії)
  3. Інтеграція Eclipse / Visual Studio дуже приємна
  4. Ви можете розробити кілька функцій в одній гілці для кожного списку змін (я все ще не впевнений на 100%, чи це перевага перед GIT)
  5. Ви можете "підглядати", що роблять інші розробники - які файли вони перевіряли.

Особливості GIT:

  1. У мене склалося враження, що командний рядок GIT набагато простіший, ніж Perforce (init / clone, add, commit. Без конфігурації складних робочих просторів)
  2. Швидкість доступу до історії проекту після оплати (коштує копіювання всієї історії під час синхронізації)
  3. Офлайн-режим (розробники не будуть скаржитися, що недоступний сервер P4 забороняє їм кодувати)
  4. Створення нових гілок відбувається набагато швидше
  5. "Основному" серверу GIT не потрібно багато ТБ байтів, оскільки кожен розробник може мати власну локальну пісочницю
  6. GIT - це OpenSource - плата за ліцензування відсутня
  7. Якщо ваша компанія також бере участь у проектах OpenSource, то спільне використання патчів набагато простіше за допомогою GIT

Загалом для проектів OpenSource / Distributed я завжди рекомендував би GIT, оскільки це більше схоже на додаток P2P, і кожен може брати участь у розробці. Наприклад, я пам’ятаю, що коли я робив віддалену розробку з Perforce, я синхронізував проекти на 4 Гб за посиланням 1 Мбіт / с раз на тиждень. Через це просто витратили багато часу. Також для цього нам потрібно було налаштувати VPN.

Якщо у вас невелика компанія, і сервер P4 завжди буде працювати, то я б сказав, що Perforce - це також дуже хороший варіант.


Функція Git №1 - у кращому випадку сумнівна претензія. Можливо, Git виграє при налаштуванні, але щоденне використання досить незграбне (для виконання простого завдання часто потрібні кілька команд)
Адам Паркін,

1
@AdamParkin Які завдання вам здаються незграбними з командного рядка? (Я використовую графічні інтерфейси, де це можливо, але я думаю, що структура команд Git є пристойною.)
Марнен Лейбоу-Козер

1
@AdamParkin Ну, простота використання командного рядка - це естетичний аспект, отже, він принаймні суб’єктивний. Причиною того, чому я особисто вважаю командний рядок Git простішим, ніж Perforce, є те, що у Perforce вам потрібно налаштувати робочі простори та змінні середовища (P4USER тощо), перш ніж ви можете навіть почати працювати з файлами сховища, порівняно з одним "клоном git" команди. Звичайно, є кілька вдосконалених команд git, які відсутні у Perforce (наприклад, переписування місцевої історії), і вони можуть здатися "ракетною наукою" для звичайних користувачів Perforce.
user389238

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

4

Ми використовували Git деякий час, нещодавно жорсткий диск нашого сервера Git вийшов з ладу, і ми не змогли повернутися до останнього стану. Нам вдалося повернутися до декількох днів старого штату. Коли сервер було створено резервну копію. Усі в команді витягували / проштовхували свої зміни і вуаля, сервер повернувся до поточного стану.


3
У розмові Лінус розповів @ Google про Git, він розповідає про те, як він не робить резервні копії, оскільки кожен клон ядра Linux є його повною резервною копією. Дійсно хороший момент.
Адам Паркін

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

3

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

Як, наприклад, у цьому блозі співробітника компанії з розробки відеоігор: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

Однак важливим є те, що різниця в швидкості між git і perforce, коли у вас величезне сховище 6 Гб, що містить все, від документації до кожного коли-небудь побудованого двійкового файлу (і нарешті, о так! Фактична історія джерел), як правило, походить від Справа в тому, що величезні компанії, як правило, запускають Perforce, і тому вони налаштовують його, щоб вивантажити всі важливі операції до величезного серверного банку в підвалі.

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

І, як би там не було, зрештою, Perforce та git - це різні продукти. Git був розроблений виключно як VCS, і це робиться набагато краще, ніж Perforce (тим, що він має більше можливостей, які, як правило, простіші у використанні, зокрема, за висловом іншого, розгалуження у Perforce схоже на виконання відкритих сердець хірургічне втручання, це повинні робити лише фахівці: P) ( http://stevehanov.ca/blog/index.php?id=50 )

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

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


3

Я думаю, що одна річ, на яку я знаю, що GIT виграє - це здатність "зберігати закінчення рядків" у всіх файлах, тоді як perforce, схоже, наполягає на перекладі їх у формат Unix, Dos / Windows або MacOS9 ("\ n", "\ r \ n "або" \ r).

Це справжній біль, якщо ви пишете скрипти Unix у середовищі Windows або змішаному середовищі ОС. Навіть неможливо встановити правило на основі розширення файлу. Наприклад, він перетворить файли .sh, .bash, .unix у формат Unix, а файли .ccp, .bat або .com перетворить у формат Dos / Windows.

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

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

"Рішенням", з яким ми вирішили на даний момент, є запуск команди sed, щоб видалити всі повернення кареток зі сценаріїв кожного разу, коли вони розгортаються у своєму середовищі Unix. Це теж не ідеально, тим більше, що деякі з них розгортаються всередині файлів WAR, і лінію sed потрібно запускати знову, коли вони розпаковуються.

Це лише те, що, на мою думку, дає GIT велику перевагу, і про що, на мою думку, не згадувалося вище.

РЕДАГУВАТИ: Трохи довше використовуючи Perforce, я хотів би додати ще пару коментарів:

A) Щось, чого я дуже скучаю у Perforce, - це чітке та примірник різниці, включаючи змінені, видалені та додані файли. Це доступно в GIT за допомогою git diffкоманди, але в Perforce файли потрібно перевіряти перед тим, як їх зміни будуть записані, і хоча у вас можуть бути налаштовані ваші основні редактори (наприклад, Eclipse) для автоматичної перевірки файлів під час їх редагування, ви іноді може редагувати файли іншими способами (блокнот, команди unix тощо). А нові файли, здається, взагалі не додаються автоматично, навіть за допомогою Eclipse та p4eclipse, що може досить дратувати. Отже, щоб знайти всі зміни, вам потрібно запустити "Diff against ..." на всій робочій області, яка, перш за все, займає деякий час, а по-друге включає всі види нерелевантних речей, якщо ви не створили дуже складні списки виключень, що веде мене до наступного пункту.

Б) У GIT я вважаю .gitignore дуже простим і простим в управлінні, читанні та розумінні. Однак списки ігнорування / виключення робочої області, що налаштовуються у Perforce, здаються громіздкими та надмірно складними. Я не зміг отримати жодних виключень, коли працюють узагальнюючі символи. Я хотів би зробити щось подібне

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

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

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

І подібні рядки для папок для сміття, файлів .classpath та .projet тощо.

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


2

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

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


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

-5

Ось що мені не подобається у git:

Перш за все, я думаю, що розподілена ідея летить перед реальністю. Кожен, хто насправді використовує git, робить це централізовано, навіть Лінус Торвальдс. Якби ядро ​​управлялося розподіленим способом, це означало б, що я фактично не міг завантажити "офіційні" джерела ядра - їх не було б - мені довелося б вирішити, чи хочу я версію Лінуса чи версію Джо, або версія Білла. Це, очевидно, було б смішно, і тому існує офіційне визначення, яке Linus контролює за допомогою централізованого робочого процесу.

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

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

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

Давайте візьмемо приклад добре фінансуваного великого проекту і подивимось, як git працює для них: Android. Одного разу я вирішив пограти з самою системою android. Я дізнався, що мав використовувати купу сценаріїв, що називаються repo, щоб дістатись їх git. Деякі з репо виконуються на клієнті, а деякі - на сервері, але обидва самі по собі ілюструють той факт, що git є неповним у будь-якій якості. Сталося так, що я не міг дістати джерела близько тижня, а потім взагалі відмовився. Мені довелося б отримати справді величезну кількість даних з декількох різних сховищ, але сервер був повністю перевантажений такими людьми, як я. Час очікування репо закінчувався, і він не зміг відновити роботу з того місця, де він закінчився. Якщо git настільки розповсюджуваний, ви могли б подумати, що вони я зробив якусь рівну рівну річ, щоб зняти навантаження на цьому одному сервері. Git можна розповсюджувати, але це не сервер. Git + repo - це сервер, але репо не розповсюджується, тому що це лише спеціальна колекція хаків.

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

Навіть якби ти вірив у розподілену річ, git все одно був би хаосом. Наприклад, що таке філія? Вони кажуть, що ви неявно робите гілку кожного разу, коли клонуєте сховище, але це не може бути таким самим, як гілка в одному сховищі. Отже, це принаймні дві різні речі, які називаються філіями. Але потім ви також можете перемотати репо і просто розпочати редагування. Це як другий тип гілок, чи знову щось інше? Можливо, це залежить від того, який тип репо у вас є - о так - мабуть, репо - це не дуже чітка концепція. Є нормальні і голі. Ви не можете натиснути на звичайний, оскільки гола частина може вийти з синхронізації з деревом джерела. Але не можна cvsimport до голого, тому що вони не думали про це. Отже, вам потрібно cvsimport до нормального, клонувати це до оголеного, який вдарили розробники, і cvsexport - до робочої копії cvs, яку ще потрібно перевірити на cvs. Кому можна заважати? Звідки взялися всі ці ускладнення? З самої розподіленої ідеї. Зрештою я кинув гітоліт, тому що він накладав на мене ще більше цих обмежень.

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

У perforce вам рідко потрібні гілки, оскільки ви можете дуже гнучко жонглювати наборами змін. Наприклад, звичайний робочий процес полягає в тому, що ви синхронізуєтесь з останньою відомою доброю версією на головній лінії, а потім пишете свою функцію. Щоразу, коли ви намагаєтесь змінити файл, різниця цього файлу додається до "набору змін за замовчуванням". Коли ви намагаєтеся перевірити набір змін, він автоматично намагається об'єднати новини з основної лінії у ваш набір змін (ефективно перебазуючи їх), а потім фіксує. Цей робочий процес застосовується, навіть якщо вам не потрібно його розуміти. Таким чином, Mainline збирає історію змін, які ви зможете легко вибирати пізніше. Наприклад, припустимо, ви хочете повернути старий, скажімо, той, що був попереднім. Ви синхронізуєтесь із моментом до зміни, що позначається, позначте файли, що зазнали впливу, як частину набору змін, синхронізувати з моментом після і об’єднати з "завжди моїм". (Там було щось дуже цікаве: синхронізація не означає мати те саме - якщо файл можна редагувати (тобто в активному наборі змін), він не буде заблокований синхронізацією, але позначений як належний для вирішення.) Тепер у вас є список змін, який скасовує правопорушник. Об’єднайте наступні новини, і у вас буде список змін, який ви зможете прокласти поверх основної лінії, щоб отримати бажаний ефект. Жодного разу ми не переписували жодної історії. Об’єднайте наступні новини, і у вас буде список змін, який ви зможете прокласти поверх основної лінії, щоб отримати бажаний ефект. Жодного разу ми не переписували жодної історії. Об’єднайте наступні новини, і у вас буде список змін, який ви зможете прокласти поверх основної лінії, щоб отримати бажаний ефект. Жодного разу ми не переписували жодної історії.

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

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

Інша справа - реплікація. У git все можливо, тому вам доведеться розібратися в цьому самі. Працюючи, ви отримуєте ефективно кеш-пам’ять без громадянства. Єдина конфігурація, яку йому потрібно знати, - це де знаходиться ведучий, і клієнти можуть на свій розсуд вказувати на головний або кеш. Це п’ятихвилинна робота, і вона не може піти не так.

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

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


4
О, який біс. У мене є кілька хвилин, тому я спробую прокоментувати деякі більші помилки. "Якби ядром управляли розподіленим способом, це означало б, що я фактично не міг завантажити" офіційні "джерела ядра - їх не було б - мені довелося б вирішити, чи хочу я версію Лінуса чи версію Джо або версія Білла. "- Я не можу конкретно розмовляти з проектом ядра Linux, оскільки я ніколи над ним не працював, але загалом саме так працює програмне забезпечення з відкритим кодом. Ви можете завантажити будь-яку вподобану вилку.
Marnen Laibow-Koser

2
"Те, що ми насправді хочемо зробити зі всіма цими старими речами, забиваємо їх у шафу і забуваємо, що вони там, як і будь-який звичайний VCS. Той факт, що Git щодня тягне все це туди-сюди по мережі, дуже небезпечно, тому що це дратує вас, щоб його обрізати ". • Ви коли-небудь використовували Git? Git не заважає вам обрізати репо. Крім того, стиснення даних Git надзвичайно ефективно; нерідкі випадки, коли репозиторій Git - зі складною історією гілок - значно менший, ніж робоча копія SVN (без історії) тієї ж кодової бази.
Marnen Laibow-Koser

4
"Кожен звичайний VCS унеможливлює переписування історії для всіх, крім адміністраторів, і гарантує, що у адміністраторів немає підстав розглядати це. Виправте мене, якщо я помиляюся, але, наскільки мені відомо, git не дає можливості нормальним користувачам писати отримати доступ, але заборонити їм переписувати історію. Це означає, що будь-який розробник, який має злість (або хто все ще бореться з кривою навчання), може смітити всю кодову базу ". • Ви помиляєтесь на 100%. Легко заборонити примусові натискання на репо, одночасно дозволяючи доступ до запису. Крім того, кожен може отримати копію репо, скільки завгодно, тому сміття не буде працювати.
Марнен Лейбоу-Козер

3
"Git каже, що розгалуження повинно бути легким, але багато компаній вже мають серйозну проблему неправдивих філій, тому я б подумав, що розгалуження має бути важливим рішенням із суворим контролем. Тут справді світить Performance" "проблема неправдивої гілки"? Чому, на вашу думку, розгалуження має бути "важливим рішенням"? На практиці дуже корисно мати можливість створювати гілки (приватні чи загальнодоступні) для кожної нової функції чи експерименту, щоб кожна з них жила у своєму альтернативному всесвіті. На відміну від, скажімо, SVN, Git полегшує злиття, так що це працює дуже добре.
Marnen Laibow-Koser

3
Той факт, що ця відповідь має лише один голос проти мого (мабуть, @Marnen), мене вражає, враховуючи, наскільки об'єктивно неправильною є ця відповідь.
альтернатива

-8

Поширеним є використання GIT як замінника управління невдалим рядком коду. Багато недоліків Perforce є наслідком поганих стратегій розгалуження. Те саме для будь-якого іншого централізованого інструменту. Якщо вам доводиться створювати тонну гілок, ви робите щось не так. Навіщо розробникам потрібно створювати стільки гілок?

Крім того, чому робота в режимі відключення так важлива? Просто щоб хтось міг працювати в поїзді? Це приблизно єдине місце, де сьогодні неможливо отримати бездротове з’єднання. І навіть у більшості поїздів є гідний Wi-Fi.


9
Деякі розробники люблять створювати гілки, щоб вони могли легко ізолювати та сегментувати різні розробки, прототип, виправлення помилок тощо. Часто це залежить від типу роботи. Гілки Perforce досить важкі в управлінні порівняно з гілками Git & Mercurial, і тому можуть бути зроблені деякі справжні покращення продуктивності.
Грег Вітфілд,

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

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

6
Проголосування проти: "Якщо вам потрібно створити тонну гілок, ви робите щось не так". Це може бути правдою в централізованому VCS з неадекватними інструментами злиття (наприклад, SVN або CVS - ніколи не використовуються Perforce). Це неправда в Git, де розгалуження та злиття є простими та поширеними. Це дає свободу кожному об’єкту, що розробляється, перебувати у своєму альтернативному всесвіті до інтеграції. Особисто я ніколи не повернувся б до середовища, де б не міг розгалужитися з примхи.
Marnen Laibow-Koser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.