Отслеживание изменений SVN против Git - PullRequest
0 голосов
/ 26 ноября 2018

Во время просмотра учебного пособия на Lynda.com, посвященного распределенным системам управления версиями и централизованным системам управления версиями, я натолкнулся на некоторый текст, который меня смутил о том, как Git отслеживает иначе, чем централизованные системы управления версиями.Я всегда думал, что упомянутые VCS отслеживают изменения, и при фиксации вы сохраняете моментальный снимок этих изменений в хранилище, которое используется для перехода от версии к версии.Но по какой-то причине следующий текст утверждает, что Git не работает таким образом.

Может кто-нибудь попытаться объяснить и прояснить это для меня?

В Git изменения хранятся в виде наборов изменений или исправлений, и мы сосредоточены на отслеживании изменений, а не версийдокумент.Это небольшая разница, вы можете подумать, что CVS и SVN тоже отслеживают эти изменения, но не делают этого.Они отслеживают изменения, которые требуется получить от версии к версии каждого из разных файлов или разных состояний каталога.Git не работает таким образом, Git действительно сосредотачивается на этих наборах изменений при инкапсуляции набора изменений как отдельной единицы, и затем эти наборы изменений можно обменивать между репозиториями.Мы не пытаемся быть в курсе последних версий чего-либо, вместо этого вопрос в том, применен ли набор изменений или нет?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Этот урок ужасно неправильн:

  1. Git не хранит наборы изменений.Git вычисляет наборов изменений, динамически, по запросу.(Git выполняет дельта-сжатие внутри файлов пакета, но файлы пакета довольно хорошо спрятаны, по сравнению с моделью хранения объектов Git, которая преднамеренно раскрывается с помощью хеш-идентификаторов.)
  2. Это бесполезное различие при обсуждении распределенных ицентрализованная.(См. Также ответ Кан .)

Вот что я должен сказать о распределении и централизации в моей собственной книге:

КлючРазница между этими двумя типами систем заключается в том, что централизованная VCS имеет назначенный главный репозиторий.Может быть несколько копий мастера или даже несколько мастеров с каким-то протоколом синхронизации (например, ClearCase MultiSite), но есть только один мастер.Их конструкция предполагает этот единственный мастер-корабль и, следовательно, может зависеть от него.

В распределенной VCS нет назначенного главного репозитория.Пользователи обычно имеют полную частную копию каждого хранилища.Связь между этими частными копиями - это, по крайней мере, в принципе, одноранговые операции: ни один из репозиториев не является более искусным, и конфликты - ситуации, когда Алиса и Боб вносили изменения в одни и те же области одних и тех же файлов, - могут и делаютвозникают и требуют некоторого разрешения.

Всегда можно использовать распределенную VCS централизованным способом: вы просто назначаете один конкретный репозиторий в качестве главной версии и координируете обновления для нее.Однако централизованные системы часто предоставляют такие функции, как блокировка исходных файлов или каталогов, ограничение доступа (для чтения и / или записи, к конкретным файлам, каталогам и / или ветвям) и т. Д.С типичными DVCS их труднее (хотя и технически невозможно) предоставить, а у Git и Mercurial просто нет, по крайней мере, без надстроек.С CVCS, которые обеспечивают блокировку, пользователи могут блокировать файлы (обычно только один конкретный идентификатор версии), чтобы другие пользователи не могли вносить конфликтующие изменения.Концептуально это проще, но, конечно, он может запретить параллельную работу.

0 голосов
/ 26 ноября 2018

В CVCS изменения синхронизируются вокруг единого центрального хранилища.Таким образом, совершая изменение, пользователь создает единственную версию в этом хранилище для других.

В то время как в DVCS каждый пользователь имеет свою собственную независимую копию хранилища, и все наборы изменений (или фиксации) идут сюда изначально.Существует отдельный процесс синхронизации изменений между другими пользовательскими репозиториями с помощью команд извлечения / нажатия.

...