GIT против Perforce. Две системы контроля версий войдут, одна уйдет

Итак, я нахожусь в процессе продажи GIT на работе. Первое, что мне нужно, это убедить всех, что GIT лучше справляется с тем, к чему они уже привыкли. В настоящее время мы используем Perforce. Кто-нибудь еще проходил подобную распродажу? Любые хорошие ссылки / советы?

Одним из больших преимуществ является то, что мы можем работать с ним, отключенным от сети. Еще одна победа, IMO, — это то, как обрабатываются добавления / проверки. Больше баллов приветствуется! Также у нас всего около 10-20 разработчиков.


person Justin Bozonier    schedule 21.10.2008    source источник


Ответы (14)


Исходный код интерпретатора Perl 5 в настоящее время переживает муки преобразования с Perforce на git. Может быть, вас заинтересует импортер git-p4raw Сэма Вилена.

В любом случае, одно из главных преимуществ, которое вы получите по сравнению с любой централизованной системой контроля версий и большинством распределенных систем, — это невероятная скорость. Вы не можете себе представить, насколько это освобождает, когда вся история проекта находится под рукой, всего лишь доли секунды, пока вы не испытаете ее на себе. Даже создание журнала коммитов всей истории проекта, включающего полные различия для каждого коммита, может измеряться долями секунды. Git настолько быстр, что ваша шляпа слетит. У VCS, которые должны выполнять обмен данными по сети, просто нет шансов конкурировать, даже по каналу Gigabit Ethernet.

Кроме того, git позволяет очень легко быть тщательно избирательным при совершении коммитов, тем самым позволяя распределять изменения в вашей рабочей копии (или даже в одном файле) по нескольким коммитам — и по разным веткам, если вам это нужно. Это позволяет вам делать меньше мысленных заметок во время работы — вам не нужно так тщательно планировать свою работу, заранее решая, какой набор изменений вы будете вносить, и обязательно откладывая все остальное. Вы можете просто вносить любые изменения, которые хотите, по мере того, как они приходят к вам, и все равно распутывать их — почти всегда довольно легко — когда придет время зафиксировать. Тайник может очень помочь здесь.

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

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

person Aristotle Pagaltzis    schedule 21.10.2008
comment
Предположительно, песочница p4 предоставляет p4 некоторые автономные возможности. Тем не менее, мне все еще нравится git. :) - person Dominic Mitchell; 08.11.2011
comment
Git не предоставляет «автономных возможностей», он находится в автономном режиме. Единственное, что вы отправляете данные по сети, — это когда вы отправляете коммиты в источник или извлекаете изменения из других подрепозиториев. - person Evan Plaice; 23.04.2012
comment
Git настолько быстр, что у вас слетит шляпа от любви к нему :) Единственное, что это не очень верно, когда вы начинаете регистрировать двоичные файлы. большие репозитории неприятны в git. - person v.oddou; 27.08.2013
comment
К сожалению правда. То, как работает Git, зависит от чтения файлов и отчасти от их сравнения, поэтому они должны быть небольшого размера и хорошо различаться. Тогда это будет чрезвычайно быстро (как в примере с мгновенной историей полных различий для сотен коммитов). С огромными каплями? Не так много… - person Aristotle Pagaltzis; 10.11.2013

Я использую Перфорс на работе. Я также использую Git, потому что мне все еще нужна какая-то форма контроля версий, когда я работаю над кодом и не могу подключиться к серверу. Нет, смириться с работой в офлайне просто не то же самое. Вот где я нашел git большим преимуществом:

  1. Скорость ветвления — git занимает максимум несколько секунд.
  2. Конфликты — автоматическое разрешение P4Merge однажды уничтожило недельную работу. С тех пор я предпочитаю решать вручную при слиянии. Когда Git сообщает мне о конфликте, это на самом деле конфликт. В остальное время git корректно разрешает проблемы, и я экономлю кучу времени.
  3. Отслеживание слияний. Если у вас есть одна ветка, которая постоянно получает слияния из двух других веток, вы знаете, какой головной болью это может быть с принудительной силой. С git головная боль сводится к минимуму, потому что результатом слияния в git фактически является новый коммит, который знает, кто его предки.
  4. Разрешения. Я потерял счет количеству попыток работы с файлом, но не смог, потому что он не был извлечен в Perforce. Если вы работали с XCode (или любым редактором, в котором нет надежного плагина Perforce SCM) в автономном режиме, вы знаете, как это может раздражать. Мне не нужно беспокоиться об этом с Git. Я вношу свои изменения. Git не останавливает меня и отслеживает их в фоновом режиме.
  5. Поддержание порядка в главном дереве. С помощью git я могу сортировать свои коммиты и упорядочивать код, чтобы история выглядела красиво и аккуратно. Ничего из этого "проверка этого файла, потому что он должен был быть частью предыдущей регистрации" мусора. Я подавляю такие коммиты, потому что они никому не помогают.
  6. Сохранение — ваш сервер perforce должен быть версии 2010.1 или новее, чтобы использовать команду полки p4.
  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 или Perforce. Лично я предпочитаю подход Git, потому что он более точно отражает фактические изменения в коде. Git может это сделать, потому что отслеживает содержимое файла, а не сам файл.
  13. Централизованная или децентрализованная: Git — это DVCS система, в то время как perforce централизован. Централизованная система контроля версий не может быть децентрализована позже, но DVCS (особенно git) может быть централизована. Есть несколько продуктов, которые добавляют в git очень тонкий контроль доступа, если это необходимо бизнесу. Лично я бы выбрал систему, которая дает мне большую гибкость в долгосрочной перспективе.
  14. Сопоставление ветвей: если вы хотите выполнять ветвления прямо в Perforce, вам необходимо создать сопоставление ветвей. Для этого есть причины, но они связаны с тем, как Perforce концептуализирует ветку. Как разработчик или команда, это просто означает еще один шаг в рабочем процессе, который я совсем не считаю эффективным.
  15. Разделение работы между командами: с Perforce вы не можете разбить отправку. Команда A работает над функцией A. Команда B над функцией B. Команда C работает над исправлением ошибок. Теперь командам A и B нужно исправить кучу ошибок, чтобы реализовать свои функции. Единственное, они не были настолько дисциплинированы при фиксации своих изменений (вероятно, потому, что они спешат к крайнему сроку), и поэтому их «исправления ошибок» являются частью более крупных представлений, которые также содержат новые вещи, такие как контроль версий на их беспокоят филиалы. Тем не менее, команда C сейчас делает точечный релиз и хотела бы получить исправления ошибок от других команд. Если бы они использовали Git, команда C могла бы выбрать соответствующие изменения других команд, разделить их и взять только то, что им нужно, не беспокоясь о внедрении каких-либо частично реализованных функций. С Perforce команда C может получить затронутые файлы, но ей придется отделить соответствующие изменения, используя гораздо более ручной процесс.
  16. Смена платформы. Если по какой-либо причине в будущем вы решите сменить предпочитаемую платформу, с Perforce вы зависите от Perforce.com и наличия инструментов для выбранной вами платформы.
  17. Переход на будущий удивительный механизм управления исходным кодом X. Если вы решите изменить то, что вы используете для управления исходным кодом, извлечение истории управления исходным кодом из Perforce и перенос ее в новую систему X будет кошмаром, потому что это закрытый исходный код и лучший вы можете только догадываться - просто Google для миграции Perforce на Git, чтобы понять, о чем я говорю. По крайней мере, с Git, его исходным кодом с открытым исходным кодом, поэтому он устраняет множество догадок.

Ну, это мои 2 цента. В защиту Perforce я должен сказать об их правилах поддержки клиентов, а также об их инструменте Time Lapse View. Я не знаю, как получить замедленную съемку с помощью git. Но для удобства и экономии времени я бы использовал git в любой день.

person Carl    schedule 06.05.2010
comment
re #6 (заначка): полка p4, это новое. - person Trey; 11.06.2010
comment
Спасибо. Я обновил свой ответ :) - person Carl; 28.10.2010
comment
Самая большая разница между Perforce и Git — это требуемый склад ума. Если вы управляете централизованным магазином VCS, git будет очень трудно продавать, потому что он требует изменения того, как вы, ваша команда и бизнес думаете о контроле версий. Другими словами, git — отличный и эффективный инструмент, технически более совершенный, чем Perforce. Самое сложное - убедить людей :) - person Carl; 07.02.2012
comment
Я влюблен в Перфорс. Читая этот пост, чувствую себя обманщиком... - person KlausCPH; 08.01.2013
comment
@KlausCPH, по крайней мере, вам не придется готовить прощальную речь, когда вы покинете Perforce :) - person Carl; 08.01.2013
comment
@carleeto Можете ли вы уточнить № 13? Какой продукт помогает контролировать доступ? - person chen; 07.04.2013
comment
@chen: есть несколько способов контролировать доступ к репозиторию git. Это зависит от того, что вам нужно. Эта страница даст вам хороший обзор (jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository). - person Carl; 08.04.2013
comment
скорость ветвления git НЕ takes a few seconds at most - она ​​точно равна нулю. Хорошо, не точно, просто нужно создать один файл длиной 41 байт. - person mvp; 17.05.2013
comment
@mvp: Мы все знаем, что происходит на самом деле. Однако скорость создания ветки основана на восприятии — это касается графического интерфейса, если он есть (не все используют командную строку). Вот почему я сказал максимум несколько секунд. - person Carl; 19.05.2013
comment
Карл сказал: Я использую Perforce на работе. Я также использую Git, потому что мне все еще нужна какая-то форма контроля версий, когда я работаю над кодом и не могу подключиться к серверу. Нет, смириться с работой в офлайне просто не то же самое. // Это шаблон, который я видел снова и снова: использование инструмента контроля версий №2 при работе с инструментом контроля версий №1. Не только для того, чтобы справиться с автономным доступом к централизованному VCVS. Я также использовал его, чтобы сделать главное дерево красивым, проверяя его заранее и часто локально, а затем реорганизуя аккуратные блоки для главного дерева. Git/hg/bzr так себе. - person Krazy Glew; 29.03.2014

Мне потребовалось бы немало усилий, чтобы переключиться с perforce. В двух компаниях, которые я использовал, этого было более чем достаточно. Это были обе компании с разрозненными офисами, но офисы были созданы с большим количеством инфраструктуры, поэтому не было необходимости иметь разрозненные/отключенные функции.

О скольких разработчиках вы говорите?

Настоящий вопрос заключается в том, что такого в perforce, что не отвечает потребностям вашей организации, которые может обеспечить git? Аналогично, какие недостатки есть у git по сравнению с perforce? Если вы сами не можете ответить на этот вопрос, то вопрос здесь не поможет. Вам нужно найти бизнес-кейс для вашей компании. (например, возможно, это связано с более низкой общей стоимостью владения (включая потерю производительности на промежуточном этапе обучения, более высокие административные расходы (по крайней мере, на начальном этапе) и т. д.)

Я думаю, что вас ждет жесткая продажа - Perforce - довольно хороший вариант, чтобы попытаться заменить его. Это не проблема, если вы пытаетесь загрузить pvcs или ssafe.

person Tim    schedule 21.10.2008
comment
Я добавлю, что замечательный набор функций Git достигается за счет крутой кривой обучения. (Хотя я никогда не находил Perforce настолько интуитивным.) - person savetheclocktower; 21.10.2008
comment
Я обновил вопрос. Я могу заверить вас, что я не пытаюсь продать это, чтобы использовать последнюю и самую лучшую VCS. Мой босс продан, нам просто нужно продать остальную часть команды. - person Justin Bozonier; 21.10.2008
comment
Отличный ответ Тим. Джастин, почему твой босс продался? Конечно, вы должны были ответить на вопрос Тима, чтобы сделать это? Меня тоже интересовало обоснование. - person Greg Whitfield; 22.10.2008
comment
Самая главная причина, по которой он продался, — это возможность использовать Git в отключенном состоянии. Кроме того, мы используем только основные функции p4, а Git гораздо проще использовать для нашего общего случая использования. Мы смотрим, как другие используют p4, и убеждаемся, что можем сделать это с помощью Git. - person Justin Bozonier; 22.10.2008
comment
Вы должны платить за Perforce в коммерческой среде, и действительно, я всегда находил, что использование Perforce раздражает. И единственная сила, которую я действительно вижу, это то, что он хорошо справляется с огромными бинарными блобами. - person Calyth; 28.01.2009
comment
@Justin: Остерегайтесь того, что мы будем использовать только основные функции. С git вы в конечном итоге будете использовать более продвинутые вещи. Почему бы и нет? Сразу приходит на ум Бисек. Так что делайте ребаз и вишневый выбор. - person Carl; 16.02.2011
comment
@carleeto Абсолютно согласен, но перебазирование обычно зло. Обычно вместо этого следует использовать слияние. :) - person Marnen Laibow-Koser; 19.05.2012
comment
@MarnenLaibow-Koser Я бы не сказал, что перебазирование — это зло. Его просто нужно использовать правильно, потому что это действительно мощный инструмент. Если git внедряется на коммерческом уровне, я бы сказал, что предварительное обучение концепциям, лежащим в основе git, будет иметь большое значение для предотвращения любого зла rebase. - person Carl; 21.05.2012
comment
@carleeto Я использую Git каждый день, но перебазирую только раз в месяц, если что. Раньше я регулярно перебазировал, пока не научился эффективно объединять. Хотя я согласен с тем, что перебазирование иногда полезно, но если оно используется более одного раза в голубую луну, я думаю, что что-то не так с рабочим процессом. - person Marnen Laibow-Koser; 21.05.2012
comment
@MarnenLaibow-Koser Я бы не согласился, но каждому свое. Это действительно прекрасная вещь в git - он не диктует используемый вами рабочий процесс :) - person Carl; 23.05.2012
comment
@carleeto Я обычно нахожу, что каждый немного слаб в такой области, как разработка программного обеспечения, где все на самом деле можно продемонстрировать. Для чего вы считаете rebase полезным? - person Marnen Laibow-Koser; 23.05.2012
comment
@MarnenLaibow-Koser Чтобы сохранить четкую историю. Пока вы выполняете перебазирование с хорошим тестированием перед слиянием с мастером, вам действительно не о чем беспокоиться. Rebase — это не что иное, как инструмент. Инструменты не являются злом — зло может быть вызвано тем, как они используются. - person Carl; 24.05.2012
comment
@carleeto Я думаю, что история остается намного яснее, если вы не используете такие инструменты, как rebase, чтобы изменить ее. Как вы используете rebase для сохранения чистой истории? И я согласен, rebase — это не зло; изменение истории (обычно) зло. Rebase — это зло, поскольку оно используется для изменения истории, что является наиболее распространенным вариантом его использования. :) - person Marnen Laibow-Koser; 29.05.2012
comment
@MarnenLaibow-Koser Я бы посоветовал немного больше почитать о git-rebase. - person Carl; 30.05.2012
comment
@carleeto Думаю, я полностью знаком с тем, как работает Git rebase. Как вы думаете, что мне не хватает? - person Marnen Laibow-Koser; 11.06.2012
comment
@MarnenLaibow-Koser: если вы делаете много инкрементных небольших коммитов локально, часто вы не хотите, чтобы они были в порядке, я сейчас попробую, чтобы эти коммиты оказались в master/master. Rebase позволяет вам сжать их в небольшой коммит, чтобы история не была загромождена тривиальными коммитами. - person Adam Parkin; 02.08.2012
comment
@AdamParkin Не согласен. Обычно я хочу, чтобы каждый коммит WIP попадал в master — сейчас это может показаться шумом, но часто бывает полезно позже при запуске git bisect. Кроме того, у меня не так много экспериментальных коммитов: я обычно не делаю коммитов, даже WIP, пока тесты не пройдены. Надеюсь, я обращаюсь к вашей точке зрения; если я говорю о другом сценарии, пожалуйста, посоветуйте. По общему признанию, использование перебазирования, которое вы описываете, является наименее нежелательным, о котором я могу думать, но я не думаю, что это должно происходить часто. - person Marnen Laibow-Koser; 02.08.2012
comment
@MarnenLaibow-Koser: Я думаю, это просто сводится к разнице в том, как мы с вами подходим к нашей работе: мои локальные коммиты — это просто контрольные точки, чтобы я мог что-то попробовать, и если что-то пойдет не так, то легко вернуться обратно. Мой удаленный мастер представляет собой исходный код — тот, который проходит все тесты и т. д. В любом случае я не согласен с комментарием пополам — меньшее количество коммитов означает меньшее количество итераций, определяющих, где что-то пошло не так. Возможно, вы могли бы возразить, что более детализированные коммиты облегчают определение конкретной проблемы, но я не уверен, что это правда. - person Adam Parkin; 03.08.2012
comment
@AdamParkin «мои локальные коммиты — это просто контрольные точки, чтобы я мог что-то попробовать»: мои тоже. Но мои тесты обычно гарантируют, что каждая контрольная точка является контрольной точкой прохождения тестов и, следовательно, представляет собой развертываемую гранулу. Я даже был известен тем, что разбивал большие коммиты на несколько маленьких, так что каждый коммит представлял собой одно атомарное (проходящее) изменение. «Возможно, вы могли бы возразить, что более детализированные коммиты облегчают определение конкретной проблемы, но я не уверен, что это правда». — Таков был мой опыт. Git bisect обычно укажет вам прямо на проблему, если вы позволите. - person Marnen Laibow-Koser; 03.08.2012
comment
@AdamParkin В любом случае я на самом деле не согласен с комментарием пополам - меньшее количество коммитов означает меньшее количество итераций, определяющих, где что-то пошло не так. Как это не согласен? Это моя точка зрения: если у вас меньше коммитов, то bisect (и любой другой анализ истории, который работает на уровне коммитов) становится тупым инструментом, гораздо менее полезным, чем если бы у вас было много крошечных коммитов, которые можно независимо проверить на предмет неудачи. . Если вас беспокоит количество шагов в процессе деления пополам, используйте git bisect run и идите выпейте кофе, пока Git делает свое волшебство. :) - person Marnen Laibow-Koser; 03.08.2012
comment
Даям, я никогда не знал о git bisect run, это очень полезная штука. Спасибо за совет! - person Adam Parkin; 03.08.2012
comment
@AdamParkin Добро пожаловать! Повторю: при прочих равных условиях больше маленьких коммитов обычно лучше, чем несколько больших. - person Marnen Laibow-Koser; 05.08.2012
comment
@adam и marmen -- Из-за того, что вы, ребята, вели беседу в комментариях, этот вопрос был закрыт. - person Tim; 06.08.2012
comment
На самом деле, наш соответствующий разговор в комментариях, который закончился, как только появилось приглашение «Вы уверены, что не хотите переносить это в чат», заставило кого-то наконец заметить, что этот вопрос на самом деле, не подходит для СО. По сути, это вопрос о том, почему одна система лучше другой, и вместе с этим вызывает множество оживленных дебатов. - person Adam Parkin; 06.08.2012

Я думаю, что с точки зрения того, чтобы люди были счастливы во время/после переключения, одна из вещей, которую нужно прояснить заранее, это то, насколько приватной может быть локальная ветка в Git, и сколько свободы это дает им для совершения ошибок. Заставьте их всех клонировать себе несколько приватных веток из текущего кода, а затем экспериментировать. Переименовывайте некоторые файлы, возвращайте вещи, объединяйте вещи из другой ветки, перематывайте историю, перебазируйте один набор изменений поверх другого и так далее. Покажите, что даже их самые страшные аварии на местном уровне не имеют последствий для их коллег. Что вам нужно, так это ситуация, в которой разработчики чувствуют себя в безопасности, чтобы они могли учиться быстрее (поскольку Git имеет крутую кривую обучения, что важно), а затем, в конечном итоге, чтобы они были более эффективными как разработчики.

Когда вы пытаетесь освоить централизованный инструмент, очевидно, вы будете беспокоиться о том, чтобы не сделать какую-то ерунду, которая вызовет проблемы у других пользователей репозитория. Одного страха перед смущением достаточно, чтобы отбить у людей охоту экспериментировать. Даже наличие специального «обучающего» репозитория не помогает, потому что неизбежно разработчики столкнутся с ситуацией в производственной системе, которую они никогда не видели во время обучения, и поэтому они снова беспокоятся.

Но распределенная природа Git покончила с этим. Вы можете провести любой эксперимент в локальной ветке, и если что-то пойдет не так, просто выбросьте ветку, и никто не должен об этом знать. Поскольку вы можете создать локальную ветку чего угодно, вы можете воспроизвести проблему, с которой столкнулись, в реальном живом репозитории, при этом не рискуя «сломать сборку» или иным образом выставить себя дураком. Вы можете зарегистрировать абсолютно все, как только вы это сделаете, не пытаясь группировать работу в аккуратные маленькие пакеты. Так что не только два основных изменения кода, на которые вы сегодня потратили четыре часа, но и исправление сборки, о котором вы вспомнили на полпути, и орфографическая ошибка в документации, которую вы заметили, объясняя что-то коллеге, и так далее. И если основные изменения отменены, потому что проект меняет направление, вы можете выбрать исправление сборки и орфографическую ошибку из своей ветки и без проблем сохранить их.

person tialaramex    schedule 22.10.2008
comment
Нет никаких причин, по которым вы не можете иметь частную ветвь централизованной системы. DVCS иногда лучше подходят для слияния, но только потому, что частная ветка не существует в удаленном репо, не означает, что вы не можете создать ветку только для вас, которая существует в удаленном репо. - person Billy ONeal; 04.10.2010
comment
Этот комментарий технически верен, но он как бы упускает суть. Системы контроля версий — это социальный инструмент. Социально ветка с вашим именем на общем сервере не является частной, она является общей. Да, даже с ACL и прочим. Есть и технические различия (очевидно, моя частная ветка git используется, пока я еду домой, без/ненадежного Интернета), но они второстепенны по отношению к социальным различиям. - person tialaramex; 11.10.2010
comment
Частная ветка с perforce просто отстой. Легкость, с которой вы создаете ветки и переключаетесь между ними в git, не может сравниться с perforce. В любом случае, насколько private на самом деле является частной веткой perforce. Вы не держите это локально. Вы полностью зависите от доступа к сети. - person Erik Engheim; 21.01.2011

Команда, которая привлекла меня лично к git, была bisect. Я не думаю, что эта функция доступна в какой-либо другой системе контроля версий на данный момент.

При этом, если люди привыкли к GUI-клиенту для управления исходным кодом, git их не впечатлит. Прямо сейчас единственным полнофункциональным клиентом является командная строка.

person Ryan    schedule 21.10.2008
comment
Справедливости ради (я выбрал git, а не Hg), следует отметить, что Mercurial также имеет возможность разделения пополам, хотя он поставляется в виде плагина, который вы должны загружать явно. - person Aristotle Pagaltzis; 22.10.2008
comment
У darcs было отслеживание еще до того, как появился git. Надо признать, что ранние версии были довольно грубыми. - person wnoise; 24.10.2008
comment
что касается пользовательского интерфейса - GitX на OSX превосходен. - person Antony Stubbs; 01.03.2010
comment
SourceTree также является еще одним хорошим родным клиентом OSX. Он стал бесплатным после того, как был приобретен. Я использую его уже некоторое время, и мне это нравится. До использования SourceTree я в основном работал с командной строкой. - person Prakash Nadar; 30.12.2011
comment
По моему опыту работы с Git, вам действительно нужны и командная строка, и графический клиент, чтобы использовать его эффективно. Вам нужна командная строка, потому что есть много возможностей, которые нелегко вложить в графический интерфейс, и вам нужен графический интерфейс (или, по крайней мере, git log --graph), потому что истории изменений Git имеют тенденцию быть нелинейными и их трудно визуализировать без изображения. Я использую GitX и SourceTree в качестве графических интерфейсов, хотя gitk (который теперь поставляется с Git) можно пройти в крайнем случае. - person Marnen Laibow-Koser; 21.05.2012
comment
@AdamParkin да, это выглядит интересно, SourceTree недавно также gitflow, что тоже приятно. Во всяком случае, для повседневного использования Sourcetree был хорош. Я захожу в CLI только тогда, когда это действительно необходимо. - person Prakash Nadar; 03.08.2012
comment
@AdamParkin GitX (L) никогда не работал у меня, но форк Brotherbard на GitHub довольно хорош. SourceTree немного загроможден и медленный, но имеет некоторые функции, которых нет в GitX, которые могут быть довольно хорошими. GitX не знает, как обращаться с подмодулями; SourceTree не знает, как работать с bisect. Я ловлю себя на том, что переключаюсь между ними. - person Marnen Laibow-Koser; 05.08.2012

Судя по всему, GitHub теперь предлагает компаниям обучающие курсы по работе с git. Процитируйте сообщение об этом в своем блоге:

За последние несколько недель я несколько раз приезжал в кампус Google, помогая обучать Android-пользователей работе с Git. Меня попросил Шон Пирс (вы, возможно, знаете его по славе Git и EGit/JGit — он герой, который берет на себя обслуживание, когда Джунио не в городе) помочь ему обучить инженеров Google, работающих над Android, в < b>переход с Perforce на Git, чтобы Android можно было сделать массовым. Я могу сказать вам, что я был более чем счастлив сделать это.

[…]

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

Акцент мой.

person Aristotle Pagaltzis    schedule 23.10.2008

Я давно использую Perforce, а недавно также начал использовать GIT. Вот мое "объективное" мнение:

Особенности Perforce:

  1. Инструменты с графическим интерфейсом кажутся более многофункциональными (например, представление с интервальной съемкой, график изменений)
  2. Скорость при синхронизации с головной версией (без накладных расходов на передачу всей истории)
  3. Интеграция Eclipse/Visual Studio действительно хороша
  4. Вы можете разрабатывать несколько функций в одной ветке для каждого списка изменений (я все еще не уверен на 100%, является ли это преимуществом перед GIT).
  5. Вы можете «подсмотреть», что делают другие разработчики — какие файлы они извлекли.

Особенности ГИТ:

  1. У меня сложилось впечатление, что командная строка GIT намного проще, чем Perforce (инициализация/клонирование, добавление, фиксация. Нет настройки сложных рабочих пространств)
  2. Скорость при доступе к истории проекта после оформления заказа (за счет копирования всей истории при синхронизации)
  3. Автономный режим (разработчики не будут жаловаться, что недоступный сервер P4 запретит им писать код)
  4. Создание новых веток намного быстрее
  5. «Основному» GIT-серверу не нужно много ТБ хранилища, потому что у каждого разработчика может быть своя локальная песочница.
  6. GIT — это OpenSource — никаких лицензионных сборов
  7. Если ваша компания также участвует в проектах OpenSource, то обмен исправлениями с помощью GIT намного проще.

В целом для проектов OpenSource/Distributed я бы всегда рекомендовал GIT, потому что это больше похоже на P2P-приложение, и каждый может участвовать в разработке. Например, я помню, что когда я занимался удаленной разработкой с помощью Perforce, я синхронизировал проекты размером 4 ГБ по каналу 1 Мбит/с раз в неделю. Из-за этого было просто потрачено много времени. Также нам нужно было настроить VPN, чтобы сделать это.

Если у вас небольшая компания и сервер P4 будет всегда включен, то я бы сказал, что Perforce тоже очень хороший вариант.

person user389238    schedule 15.02.2011
comment
Функция Git №1 — в лучшем случае сомнительное утверждение. Возможно, Git выигрывает в настройке, но повседневное использование довольно неуклюже (часто требуется несколько команд для выполнения простой задачи). - person Adam Parkin; 03.08.2012
comment
@AdamParkin Какие задачи вы считаете неуклюжими из командной строки? (Я использую графический интерфейс, где это возможно, но я думаю, что структура команд Git достойная.) - person Marnen Laibow-Koser; 05.08.2012
comment
@AdamParkin Что ж, простота использования командной строки - это эстетический аспект, поэтому он, по крайней мере, субъективен. Причина, по которой я лично считаю командную строку Git проще, чем в Perforce, заключается в том, что в Perforce вам нужно настроить рабочие области и переменные среды (P4USER и т. д.), прежде чем вы сможете даже начать работать с файлами репозитория, по сравнению с одной командой git clone. Конечно, есть некоторые расширенные команды git, которых нет в Perforce (например, переписывание локальной истории), и они могут показаться сложными для обычных пользователей Perforce. - person user389238; 06.08.2012
comment
Я не использовал его, но мне кажется, что управление наборами изменений - это просто ветвь бедняка, учитывая, что в git вы можете раздавить свои ветки функций или перебазировать их на мастер. - person Ryan The Leach; 23.05.2014

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

person Prakash Nadar    schedule 30.12.2011
comment
В разговоре Линуса с @ Google о Git он говорит о том, что он не делает резервные копии, поскольку все клоны ядра Linux являются его полной резервной копией. Действительно хороший момент на самом деле. - person Adam Parkin; 03.08.2012
comment
Это верно во всех смыслах, каждое закрытие является резервной копией, но git во многих случаях по-прежнему используется как централизованно-распределенный инструмент. то есть так же, как SVN с дополнительными преимуществами ветвления. Организации всегда нужна резервная копия всего, что у них есть. - person Prakash Nadar; 03.08.2012

Одно важное различие между 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, чтобы переложить важные операции на центральный сервер, на котором работает куча дорогого оборудования.

person pjnlsn    schedule 03.04.2012

Я думаю, что единственная вещь, в которой я знаю, что GIT выигрывает, это его способность «сохранять окончания строк» ​​во всех файлах, в то время как perforce, кажется, настаивает на переводе их в формат Unix, Dos/Windows или MacOS9 («\n», «\ р\п" или "\р).

Это настоящая проблема, если вы пишете сценарии 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, что может быть довольно раздражающим. Таким образом, чтобы найти все изменения, вы должны запустить «Сравнение с ...» во всей рабочей области, что, во-первых, требует времени для запуска, а во-вторых, включает в себя все виды нерелевантных вещей, если вы не настроили очень сложные списки исключений, что приводит меня к следующему пункту.

B) В GIT я нахожу .gitignore очень простым и легким в управлении, чтении и понимании. Однако списки игнорирования/исключения рабочей области, настраиваемые в Perforce, кажутся громоздкими и излишне сложными. Мне не удалось получить какие-либо исключения с работающими подстановочными знаками. Я хотел бы сделать что-то вроде

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

Чтобы исключить все целевые папки во всех проектах внутри Server/mainline. Однако, похоже, это не работает так, как я ожидал, и в итоге я добавил строку для каждого проекта, например:

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

И аналогичные строки для папок bin, файлов .classpath и .projet и многого другого.

C) В Perforce есть весьма полезные списки изменений. Однако предположим, что я вношу группу изменений, проверяю их все и добавляю в список изменений, чтобы затем поработать над чем-то еще, прежде чем отправлять этот список изменений. Если позже я внесу изменение в один из файлов, включенных в первый список изменений, этот файл все еще будет в этом списке изменений, и я не смогу позже отправить список изменений, предполагая, что он содержит только те изменения, которые я изначально добавил (хотя он будут одинаковые файлы). В GIT, если вы добавите файл и внесете в него дополнительные изменения, эти изменения не будут добавлены (и все равно будут отображаться в git diff, и вы не сможете зафиксировать файл без предварительного добавления новых изменений). , Конечно, это не так полезно, как список изменений, поскольку у вас есть только один набор добавленных файлов, но в GIT вы можете просто зафиксировать изменения, так как это на самом деле не подталкивает их. на другие изменения, прежде чем отправлять их, но вы не сможете отправить что-либо еще, что вы добавите позже, не отправив также предыдущие изменения.

person Svend Hansen    schedule 13.04.2012

У меня нет опыта работы с Git, но есть опыт работы с Mercurial, который также является распределенной системой контроля версий. На самом деле это зависит от проекта, но в нашем случае распределенная система контроля версий подходила для проекта, так как практически исключала частые неработающие сборки.

Я думаю, что это действительно зависит от проекта, так как некоторые лучше подходят для клиент-серверной системы контроля версий, а другие — для распределенной.

person Terminus    schedule 21.10.2008
comment
(Конечно, это старый ответ, но...) Вы можете запустить Git (и я предполагаю, что также Mercurial), как если бы это была клиент-серверная система контроля версий. Он по-прежнему работает лучше, чем клиент-серверные системы контроля версий, благодаря простоте ветвления и слияния, а также возможности частных коммитов. Я больше не вижу особого смысла в клиент-серверных системах контроля версий, по крайней мере, до тех пор, пока они не доведут свои навыки слияния до номинального уровня. - person Marnen Laibow-Koser; 21.05.2012

Вот что мне не нравится в git:

Прежде всего, я думаю, что распределенная идея бросает вызов реальности. Все, кто на самом деле использует git, делают это централизованно, даже Линус Торвальдс. Если бы ядро ​​управлялось распределенным способом, это означало бы, что я не мог бы загрузить «официальные» исходники ядра — их бы не было — мне пришлось бы решать, хочу ли я версию Линуса или версию Джо, или версия Билла. Это, очевидно, было бы нелепо, и именно поэтому существует официальное определение, которым Линус управляет с помощью централизованного рабочего процесса.

Если вы соглашаетесь с тем, что вам нужно централизованное определение ваших вещей, тогда становится ясно, что роли сервера и клиента совершенно разные, поэтому догма о том, что клиентское и серверное программное обеспечение должны быть одинаковыми, становится чисто ограничивающим. Догма о том, что данные клиента и сервера должны быть одинаковыми, становится явно смешной, особенно в кодовой базе с пятнадцатилетней историей, до которой никому нет дела, но всем придется клонировать.

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

Git активно поощряет людей переписывать историю, и вышесказанное, вероятно, является одной из причин этого. Каждая нормальная система контроля версий делает переписывание истории невозможным для всех, кроме админов, и гарантирует, что у админов не будет причин об этом думать. Поправьте меня, если я ошибаюсь, но, насколько я знаю, git не дает возможности предоставить обычным пользователям доступ на запись, но запрещает им переписывать историю. Это означает, что любой злопамятный разработчик (или все еще борющийся с кривой обучения) может испортить всю кодовую базу. Как мы затянем это? Ну, либо делаешь регулярные бэкапы всей истории, т.е. держишь историю в квадрате, либо запрещаешь доступ на запись всем, кроме какого-нибудь бедняги, который будет получать все дифы по электронной почте и сливать их вручную.

Давайте возьмем пример хорошо финансируемого крупного проекта и посмотрим, как git работает для них: Android. Однажды я решил поиграться с самой системой Android. Я узнал, что должен был использовать кучу скриптов под названием repo, чтобы добраться до их git. Некоторые из репозиториев работают на клиенте, а некоторые на сервере, но оба сами своим существованием иллюстрируют тот факт, что git неполноценен в любом качестве. Случилось так, что я не мог получить исходники около недели, а потом вообще сдался. Мне пришлось бы вытащить огромное количество данных из нескольких разных репозиториев, но сервер был полностью перегружен такими людьми, как я. Время ожидания репо истекло, и его невозможно было возобновить с того места, где оно истекло. Если git настолько распространяемый, можно было бы подумать, что они сделали бы что-то вроде одноранговой связи, чтобы уменьшить нагрузку на этот единственный сервер. Git можно распространять, но это не сервер. Git+repo — это сервер, но репозиторий нельзя распространять, потому что это просто специальный набор хаков.

Аналогичной иллюстрацией неадекватности git является gitolite (и его предок, который, по-видимому, работал не так хорошо). Gitolite описывает свою задачу как упрощение развертывания сервера git. Опять же, само существование этой штуки доказывает, что git не сервер, а клиент. Более того, этого никогда не будет, потому что, если он перерастет в любой из них, это будет предательством его основополагающих принципов.

Даже если бы вы верили в распределенную вещь, git все равно был бы беспорядком. Что такое, например, филиал? Говорят, что вы неявно создаете ветку каждый раз, когда клонируете репозиторий, но это не может быть то же самое, что ветка в одном репозитории. Итак, по крайней мере две разные вещи называются ветвями. Но затем вы также можете перемотать репо и просто начать редактирование. Это как второй тип ветки или опять что-то другое? Может быть, это зависит от того, какой тип репо у вас есть - о да - по-видимому, репо тоже не очень четкая концепция. Есть нормальные и голые. Вы не можете перейти к обычному, потому что пустая часть может не синхронизироваться с исходным деревом. Но вы не можете cvsimport на голую, потому что они не думали об этом. Таким образом, вы должны выполнить cvsimport в обычный, клонировать его в голый, который попали в руки разработчиков, и cvsexport в рабочую копию cvs, которую еще нужно проверить в cvs. Кого можно беспокоить? Откуда взялись все эти сложности? Из самой распространенной идеи. В конце концов я отказался от гитолита, потому что он накладывал на меня еще больше этих ограничений.

Git говорит, что ветвление должно быть легким, но у многих компаний уже есть серьезная проблема с мошенническими ветками, поэтому я подумал, что ветвление должно быть важным решением со строгим контролем. Вот где perforce действительно сияет...

На самом деле вам редко нужны ветки, потому что вы можете очень гибко манипулировать наборами изменений. Например, обычный рабочий процесс заключается в том, что вы синхронизируетесь с последней известной исправной версией в основной ветке, а затем пишете свою функцию. Всякий раз, когда вы пытаетесь изменить файл, разница этого файла добавляется в ваш «набор изменений по умолчанию». Когда вы пытаетесь зафиксировать набор изменений, он автоматически пытается объединить новости из основной ветки с вашим набором изменений (эффективно перемещая его), а затем фиксирует. Этот рабочий процесс применяется без необходимости его понимания. Таким образом, Mainline собирает историю изменений, которую вы можете легко просмотреть позже. Например, предположим, что вы хотите вернуть старый, скажем, позапрошлый. Вы синхронизируете с моментом перед оскорбительным изменением, помечаете затронутые файлы как часть набора изменений, синхронизируете с моментом после и объединяете с «всегда моим». (Там было кое-что очень интересное: синхронизация не означает наличие одного и того же — если файл доступен для редактирования (т. е. в активном наборе изменений), он не будет затерт синхронизацией, а помечен как подлежащий разрешению.) Теперь у вас есть список изменений, который отменяет оскорбительный. Объединитесь с последующими новостями, и у вас будет список изменений, который вы можете добавить поверх основной ветки, чтобы получить желаемый эффект. Мы никогда не переписывали историю.

Теперь, предположим, на полпути к вам подбегает кто-то и говорит вам бросить все и исправить какую-нибудь ошибку. Вы просто даете своему списку изменений по умолчанию имя (фактически число), затем «приостанавливаете» его, исправляете ошибку в теперь пустом списке изменений по умолчанию, фиксируете его и возобновляете именованный список изменений. Обычно несколько списков изменений приостанавливаются одновременно, когда вы пробуете разные вещи. Это легко и конфиденциально. Вы получаете то, что действительно хотите, от режима ответвления без соблазна откладывать или уклоняться от слияния с основной веткой.

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

Другое дело репликация. В git все возможно, так что вы должны сами во всем разобраться. Фактически вы получаете кэш без сохранения состояния. Единственная конфигурация, которую ему нужно знать, это где находится мастер, и клиенты могут указывать либо на мастера, либо на кеш по своему усмотрению. Это пятиминутная работа, и она не может пойти не так.

У вас также есть триггеры и настраиваемые формы для проверки кода, ссылки на багзиллы и т. д., и, конечно же, у вас есть ветки, когда они вам действительно нужны. Это не ясно, но близко, и его очень легко настроить и поддерживать.

В общем, я думаю, что если вы знаете, что собираетесь работать централизованно, как все делают, вы могли бы также использовать инструмент, который был разработан с учетом этого. Git переоценен из-за устрашающего остроумия Линуса и склонности людей ходить друг за другом, как овцы, но его основной смысл существования на самом деле не выдерживает здравого смысла, и, следуя ему, git связывает себе руки с две огромные догмы о том, что (а) программное обеспечение и (б) данные должны быть одинаковыми как на клиенте, так и на сервере, и это всегда будет усложнять и усложнять централизованную работу.

person Adrian May    schedule 21.06.2012
comment
Понижение. Вы явно не понимаете, как работает Git и как его использовать. Здесь ошибки почти в каждом абзаце. Я постараюсь обратиться к ним по отдельности, но сейчас у меня мало времени. - person Marnen Laibow-Koser; 05.08.2012
comment
О, какого черта. У меня есть несколько минут, поэтому я попытаюсь прокомментировать некоторые из более крупных ошибок. Если бы ядро ​​управлялось распределенным способом, это означало бы, что я не мог бы загрузить официальные исходники ядра — их бы не было — мне пришлось бы решать, хочу ли я версию Линуса, версию Джо или версию Билла. версия. — Я не могу говорить конкретно о проекте ядра Linux, так как никогда не работал над ним, но в целом именно так работает программное обеспечение с открытым исходным кодом. Вы можете скачать любую понравившуюся вам вилку. - person Marnen Laibow-Koser; 05.08.2012
comment
Если вы соглашаетесь с тем, что вам нужно централизованное определение ваших вещей, тогда становится ясно, что роли сервера и клиента совершенно разные, поэтому догма о том, что клиентское и серверное программное обеспечение должны быть одинаковыми, становится чисто ограничивающим. • В какой-то степени Git признает это: серверный репозиторий обычно настроен немного иначе (голым), чем клиентский репозиторий. Но каждый клиент знает, как действовать в качестве сервера, если это необходимо. Как это ограничивает? - person Marnen Laibow-Koser; 05.08.2012
comment
Что мы на самом деле хотим сделать со всеми этими старыми вещами, так это засунуть их в шкаф и забыть, что они там, как это делает любой нормальный VCS. Тот факт, что git таскает все это туда-сюда по сети каждый день, очень опасен, потому что вам нужно его обрезать. • Вы когда-нибудь использовали Git? Git не принуждает вас обрезать репозиторий. Кроме того, сжатие данных Git чрезвычайно эффективно; репозиторий Git — со сложной историей ветвей — нередко бывает значительно меньше, чем рабочая копия SVN (без истории) той же кодовой базы. - person Marnen Laibow-Koser; 05.08.2012
comment
Эта обрезка включает в себя множество утомительных решений, и она может пойти не так. Таким образом, люди, вероятно, будут хранить целую серию репозиториев моментальных снимков из разных моментов истории, но разве не для этого изначально был создан контроль версий? Этой проблемы не существовало, пока кто-то не изобрел распределенную модель. • Еще ​​одно доказательство того, что вы, вероятно, никогда не использовали Git. Эта проблема до сих пор не существует. Я не знаю никого, кто хранит эту гипотетическую серию репозиториев снимков, поскольку обрезка не требуется. Git сам по себе прекрасно справляется с большими репозиториями. - person Marnen Laibow-Koser; 05.08.2012
comment
Git активно поощряет людей переписывать историю, и вышесказанное, вероятно, является одной из причин этого. • Git не поощряет переписывание истории. Это делает это возможным, но большинство пользователей Git знают, что это плохая идея. - person Marnen Laibow-Koser; 05.08.2012
comment
Каждая нормальная система контроля версий делает переписывание истории невозможным для всех, кроме админов, и гарантирует, что у админов не будет причин об этом думать. Поправьте меня, если я ошибаюсь, но, насколько я знаю, git не дает возможности предоставить обычным пользователям доступ на запись, но запрещает им переписывать историю. Это означает, что любой злопамятный разработчик (или все еще борющийся с кривой обучения) может испортить всю кодовую базу. • Вы ошибаетесь на 100%. Легко запретить принудительную отправку в репозиторий, но при этом разрешить доступ для записи. Кроме того, у каждого может быть копия репозитория столько, сколько ему нужно, поэтому уничтожение не сработает. - person Marnen Laibow-Koser; 05.08.2012
comment
Давайте возьмем пример хорошо финансируемого крупного проекта и посмотрим, как git работает для них: Android. Однажды я решил поиграться с самой системой Android. Я узнал, что должен был использовать кучу скриптов под названием repo, чтобы добраться до их git. • Звучит как глупое решение со стороны Android, а не как недостаток Git. Я использую Git напрямую каждый день. Это не неполное. - person Marnen Laibow-Koser; 05.08.2012
comment
Аналогичной иллюстрацией неадекватности git является gitolite (и его предок, который, по-видимому, работал не так хорошо). Gitolite описывает свою задачу как упрощение развертывания сервера git. Опять же, само существование этой штуки доказывает, что git не сервер, а клиент. • Опять же, вы не знаете, о чем говорите. Предшественник Gitolite, Gitosis, работал очень хорошо. Я использовал его с большим успехом. Также нет необходимости настраивать сервер Git, потому что Git действительно является сервером, несмотря на ваши утверждения об обратном; Gitosis/Gitolite просто упрощают управление пользователями. - person Marnen Laibow-Koser; 05.08.2012
comment
Что такое, например, филиал? Говорят, что вы неявно создаете ветку каждый раз, когда клонируете репозиторий, но это не может быть то же самое, что ветка в одном репозитории. • В той мере, в какой вы неявно выполняете ветвление при каждом клонировании (что является спорным моментом), это действительно то же самое, что и ветвление в одном репозитории. Это просто именованная ссылка с историей, которую можно передавать и извлекать из других репозиториев. - person Marnen Laibow-Koser; 05.08.2012
comment
Но затем вы также можете перемотать репо и просто начать редактирование. Это как второй тип ветки или опять что-то другое? • В Git нет ничего, что называется перемоткой. Что вы здесь имеете в виду? - person Marnen Laibow-Koser; 05.08.2012
comment
Может быть, это зависит от того, какой тип репо у вас есть - о да - по-видимому, репо тоже не очень четкая концепция. Есть нормальные и голые. • Как это делает репо не очень ясной концепцией? Чистое репо такое же, как обычное репозиторий, за исключением того, что с ним не связана рабочая копия, поэтому структура каталога немного отличается. Вот и все. В этом вся разница. - person Marnen Laibow-Koser; 05.08.2012
comment
Git говорит, что ветвление должно быть легким, но у многих компаний уже есть серьезная проблема с мошенническими ветками, поэтому я подумал, что ветвление должно быть важным решением со строгим контролем. Вот где по-настоящему проявляется принудительная сила... • Что такое проблема неавторизованных веток? Как вы думаете, почему ветвление должно быть важным решением? На практике очень полезно иметь возможность создавать ветки (частные или общедоступные) для каждой новой функции или эксперимента, чтобы каждая из них жила в своей собственной альтернативной вселенной. В отличие, скажем, от SVN, Git упрощает слияние, так что это работает очень хорошо. - person Marnen Laibow-Koser; 05.08.2012
comment
Централизованная модель представляет собой набор допустимых упрощений по сравнению с распределенной моделью, которая является недопустимым обобщением. Он настолько обобщен, что в основном ожидает, что вы внедрите систему управления версиями поверх него, как это делает репо. • Нет, у вас все наоборот. Централизованная модель (на примере SVN, по крайней мере, я никогда не использовал Perforce) неуклюжа и ограничена и действительно не работает так хорошо, кроме нескольких особых случаев. Git гораздо более гибкий и работает лучше практически во всех случаях. И тот факт, что он децентрализован, является наименьшей из причин. - person Marnen Laibow-Koser; 05.08.2012
comment
Он настолько обобщен, что в основном ожидает, что вы внедрите систему управления версиями поверх него, как это делает репо. • Серьезно? Мне никогда не приходилось реализовывать систему управления версиями поверх [Git]. Как и ни одна из крупных компаний, в которых я использовал Git. Скрипты репозитория Android — это особенность проекта; Я никогда не видел ничего подобного ни в одном проекте, над которым работал. Они вам не нужны. Git сам по себе является отличной системой контроля версий. - person Marnen Laibow-Koser; 05.08.2012
comment
В общем, я думаю, что если вы знаете, что собираетесь работать централизованно, как все делают, вы могли бы также использовать инструмент, который был разработан с учетом этого. • Git был разработан с учетом этого. Он также был разработан с учетом других рабочих процессов. Я думаю, что децентрализованные функции Git немного преувеличены по сравнению с тем, что, ИМХО, является настоящими убийственными функциями: ветвление и слияние, которые действительно работают, и офигенный анализ истории. - person Marnen Laibow-Koser; 05.08.2012
comment
Git связывает себя двумя огромными догмами: (а) программное обеспечение и (б) данные должны быть одинаковыми как на клиенте, так и на сервере, и это всегда будет усложнять и усложнять централизованную работу. • Это не так. На самом деле данные на клиенте и сервере не совпадают: большинство клиентов клонируют только интересующие их ветки, а не каждую ветку, которая есть на сервере. Ваша идея о том, что Git хромает, основана на многих фундаментальных недоразумениях, на некоторые из которых я попытался указать здесь. Опять же, пожалуйста, лучше разберитесь с Git, прежде чем писать подобную критику. - person Marnen Laibow-Koser; 05.08.2012
comment
Тот факт, что этот ответ имеет только один отрицательный голос, кроме моего (очевидно, @Marnen), поражает меня, учитывая, насколько объективно неверен этот ответ. - person alternative; 20.08.2012
comment
@alternative Тот факт, что этот ответ теперь получил положительные отзывы, поражает меня еще больше. :) - person Marnen Laibow-Koser; 05.10.2012
comment
Upvoting Давайте возьмем пример хорошо финансируемого крупного проекта и посмотрим, как git работает для них: Android... Случилось так, что я не мог получить исходники около недели, а затем вообще сдался. И отсутствие мощного клиента с графическим интерфейсом, который стабильно работает на разных платформах. - person farhanhubble; 21.10.2012
comment
@farhanhubble Gitk, который поставляется с Git, — это мощный клиент с графическим интерфейсом, который работает на разных платформах. Я предпочитаю другие клиенты, потому что Gitk немного непривлекателен, но я не могу жаловаться на его функциональность. - person Marnen Laibow-Koser; 21.11.2012
comment
@wvxvw Я обнаружил, что Git довольно легко настроить (я настроил серверы для нескольких небольших проектов Git), и обнаружил, что его значения по умолчанию вполне разумны (за исключением, возможно, того, что rerere не включен по умолчанию, но это на стороне клиента вариант конфигурации, а не серверный). Как вы думаете, что не так? Более того, даже если значения по умолчанию Git неверны, как это оправдывает голосование за сообщение, полное фактических ошибок? - person Marnen Laibow-Koser; 15.05.2013

Использование GIT в качестве замены плохого управления строками кода является распространенным явлением. Многие недостатки Perforce являются результатом плохой стратегии ветвления. То же самое для любого другого централизованного инструмента. Если вам нужно создать тонну веток, вы делаете что-то не так. Зачем разработчикам создавать так много веток?

Кроме того, почему работа в автономном режиме так важна? Просто чтобы кто-то мог работать в поезде? Это единственное место в наши дни, где вы не можете подключиться к беспроводной сети. И даже в большинстве поездов есть приличный Wi-Fi.

person sogboj    schedule 07.04.2011
comment
Некоторым разработчикам нравится создавать ветки, чтобы они могли легко изолировать и сегментировать различные разработки, прототипы, исправления ошибок и т. д. Часто это зависит от типа работы. Ветки Perforce довольно сложны в управлении по сравнению с ветками Git и Mercurial, поэтому могут быть сделаны некоторые реальные улучшения производительности. - person Greg Whitfield; 10.04.2011
comment
Возможность работать в автономном режиме не всегда связана с идеей работы в поезде или самолете. Некоторые компании могут не иметь надежной сетевой инфраструктуры. Или вы можете столкнуться с перебоями в работе, обслуживанием сервера, общими сбоями и т. д. Но побочным эффектом возможности работать в автономном режиме является то, что ваши операции управления исходным кодом выполняются невероятно быстро по сравнению с системами, которые полагаются на круговой сетевой обмен, чтобы сделать что-либо. - person Greg Whitfield; 10.04.2011
comment
По моему опыту, использование процесса для управления людьми в первую очередь свидетельствует о плохой организации рабочего процесса. Рабочий процесс должен существовать, чтобы поддерживать продуктивность людей. Если он не используется, значит, с ним что-то не так, потому что, как правило, люди не идиоты и будут использовать лучший инструмент, если наткнутся на него. - person Carl; 20.06.2011
comment
Понижение из-за того, что если вам нужно создать массу веток, вы делаете что-то не так. Это может быть правдой в централизованной системе контроля версий с неадекватными инструментами слияния (такими как SVN или CVS — Perforce никогда не использовался). Это не так в Git, где ветвление и слияние легко и просто. Это дает возможность каждой разрабатываемой функции находиться в своей собственной альтернативной вселенной до интеграции. Лично я никогда не вернусь в среду, в которой я не мог разветвляться по прихоти. - person Marnen Laibow-Koser; 19.05.2012

person    schedule
comment
Не уверен, что означает несколько рабочих пространств на одной машине — другие системы контроля версий просто не имеют понятия рабочего пространства, поэтому его действительно нельзя рекламировать как функцию Perforce. Хотя остальные имеют смысл. - person Billy ONeal; 04.10.2010
comment
Пример с несколькими рабочими пространствами: у клиента A есть версии для разработки и выпуска файлов только для A, а также подмножество внутренних инструментов версии 1.52; у клиента B есть файлы только для разработки и выпуска B, а также другое, но перекрывающееся подмножество внутренних инструментов, как для разработки, так и для версии 1.52. Разработчик работает над обоими одновременно и может сделать измененные внутренние инструменты видимыми для A, чтобы увидеть, что ломается. - person Thomas L Holaday; 08.10.2010
comment
@Tomas: Почему бы тебе... Просто не проверить это дважды? Perforce должен иметь это как функцию, потому что в противном случае это становится странным из-за необходимости убедиться, что переменные среды установлены правильно, записи реестра правильны и так далее. - person Arafangion; 27.06.2011
comment
@Arafangion, не очевидно, как двойная проверка облегчает выборочное предоставление файлов для наборов сборки. - person Thomas L Holaday; 30.06.2011