Почему пользователи Git говорят, что Subversion не имеет всего исходного кода локально?

23

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

С моим ограниченным использованием SVN и TortoiseSVN у меня был весь исходный код, или, по крайней мере, я так думал. Например, у меня есть сайт. Я загружаю это в SVN. Я все еще работаю на своем сайте, не так ли? Если кто-то отправляет изменение, а я не подключен, не имеет значения, был ли у меня Git или нет, пока я не подключусь к серверу.

Не понимаю. Я не прошу перефразировать одно против другого, кроме этого пункта.

Джонни
источник
2
Дело не в том, что у вас есть весь ваш исходный код локально, а в том, что у вас есть вся история репозитория локально. Это значительно ускоряет все взаимодействия с репозиторием, кроме синхронизации с сервером.
каменный металл

Ответы:

69

Предположение, которое вы подвергаете сомнению, действительно неверно:

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

И с Subversion, и с Git у вас есть свой исходный код локально. С Git у вас есть и ваш исходный код, и хранилище на вашем локальном компьютере.

Это выглядит примерно так.

Subversion:

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

Git:

Ваш код <-> Ваш локальный репозиторий <-> Удаленный репозиторий (... <-> другой удаленный репозиторий и т. Д.)

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

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

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

Горан Йович
источник
10
Это очень хороший ответ, и он действительно звучит как "... рискуя нарушить сборку для других людей или страдать от длительного локального развития без какого-либо контроля над источниками ..."
Чарльз Спрейберри
1
@cspray: Спасибо! Я уверен, что есть и другие преимущества, но это самая большая боль, которую я испытывал с Svn.
Горан Йович
git FTW (еще 8 ...)
Тревор Бойд Смит
2
@DanNeely: На самом деле это так - OP спросил о заявлении, которое он где-то читал, и ответ таков: это просто неправда (см. Первую часть моего ответа). Вторая часть - это просто объяснение того, что, возможно, хотел сказать тот, кто сделал это заявление, и почему.
Горан Йович
1
@ Джорджио: Попробуйте, и вы узнаете :) Серьезно, я не думаю, что мне когда-либо удавалось сделать это без проблем (кроме полного слияния вручную, что побеждает назначение инструмента)
Горан Йович
17

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

Amenti
источник
1
@ Murph Спасибо. Это было по сути то, что я имел в виду. Я пытался уточнить.
Аменти
Вопрос не только в том, есть ли у вас сетевое подключение к серверу или нет; локальный ввод-вывод намного быстрее и с меньшей задержкой, чем сетевой ввод-вывод, что делает проверку истории или обвинение файла намного быстрее (предупреждение TrotiseSVN «Пожалуйста, подождите - это может занять несколько минут. Серьезно!»). Компромисс заключается в том, что наличие всей локальной истории может потребовать намного больше дискового пространства в больших репозиториях; это может быть проблематично на ноутбуках, если вы не можете просто добавить дополнительный накопитель в дополнение к меньшему твердотельному твердотельному накопителю.
Дэн Нили
@ Комментарий DanNeely, вероятно, был разумным в 2012 году, но спустя 4 года почти невозможно найти проект git, который мог бы занять любую значительную часть SSD
Игорь Стоппа
7

Краткий ответ таков: с git у вас есть весь ваш исходный код, с подрывной версией у вас есть вся самая последняя версия вашего исходного кода.

Git хранит копию всей истории вашего хранилища локально. С Subversion вся история находится на сервере.

Брайан Оукли
источник
2

Я думаю, что вы можете понять, что с SVN все ваши действия требуют связи с сервером, а GIT - нет. С SVN, если вы хотите ветвиться, вы ветвитесь на сервере и разворачиваете эту ветвь. С помощью GIT вы можете создать локальную ветку, даже не имея «сервера» об этом знать.

Вы правы, говоря, что у вас есть исходный код как с SVN, так и с GIT, но с GIT необязательно должен быть централизованный сервер, который также содержит исходный код. С GIT вы можете быть ЕДИНСТВЕННЫМ человеком с исходным кодом, но все же сможете выполнять все функции, которые вы выполняли бы с типичным VCS.

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

Дэвид Петерман
источник
1

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

Если вы толкаете ежедневно, то риск должен быть небольшим. Но если вы вынуждены выполнять ежедневную фиксацию на сервере SVN, то в конце дня вы можете сделать все за один большой набор изменений, который не разделяет каждое изменение на маленькие шаги. С git вам рекомендуется делать несколько небольших коммитов. При нажатии, если объединение требуется, чем попытаться объединить и нажать. Если вы не можете выполнить слияние в данный момент, вы можете перейти в новую ветку или другой репозиторий на сервере.

linquize
источник