Вы можете использовать as->
:
(let [x {:a 1 :b 2}]
(as-> x it
(assoc it :a 20)
(assoc it :b (:a it))))
Если ваш жесткий диск незаметно начинает повреждать данные, вы, черт возьми, хотите знать об этом. Git берет хэши SHA1 всего, что вы фиксируете. У вас есть 1 центральное репо с SVN, и если его биты будут незаметно изменены неисправным контроллером жесткого диска, вы не узнаете об этом, пока не станет слишком поздно.
А поскольку у вас есть 1 центральное репо, вы просто разрушили свой единственный спасательный круг .
С git каждый имеет идентичное репо с историей изменений, и его содержимому можно полностью доверять благодаря SHA1 его полного образа. Поэтому, если вы сделаете резервную копию 20-байтового SHA1 вашей HEAD, вы можете быть уверены, что при клонировании с какого-то ненадежного зеркала у вас будет точно такое же репо, которое вы потеряли!
Когда вы используете централизованное репо, все ветви доступны для всеобщего обозрения. Вы не можете создавать частные отделения. Вы должны создать ветку, которая еще не сталкивается с другим глобальным именем.
«
test123
- черт возьми, уже естьtest123
. Давайте попробуемtest124
.»
И все должны увидеть все эти ветки с дурацкими названиями. Вы должны уступить политике компании, которая может быть такой: «не создавайте веток, если вам действительно не нужно», что лишает вас многих свобод, которые вы получаете с git.
То же самое с фиксацией. Когда вы делаете коммит, вам лучше быть действительно уверенным, что ваш код работает. В противном случае вы сломаете сборку. Никаких промежуточных коммитов. Потому что все они идут на центральное репо.
С git у вас нет этой ерунды. Разветвляйте и фиксируйте локально все, что хотите.Когда вы будете готовы представить свои изменения остальному миру, вы просите их отозвать от вас или отправляете их в какое-то «основное» репозиторий git.
Поскольку репо является локальным, все операции VCS выполняются быстро и не требуют циклических обращений и передачи с центрального сервера! git log
не должен проходить по сети, чтобы найти историю изменений. SVN делает. То же самое со всеми другими командами, поскольку все важные данные хранятся в одном месте !
Посмотрите доклад Линуса , чтобы узнать об этих и других преимуществах перед SVN.
Скорее всего, здесь никто ничего не продаст. Если вам нужны функции git, просто git init
. Если он вам не подходит, просто не подходите.
Если вы еще не знаете функции git, введите git vs
(обратите внимание на конечный пробел) в поиске Google и просмотрите результаты автозаполнения.
Я предпочитал Notepad, а не IDE, пока мне не понадобились функции Netbeans. Кажется, что это тот же самый случай здесь.
Как вы знаете, было много успешных проектов вообще без VCS.
PS. Продажа git нарушает его лицензию! ;)
Ваш главный аргумент о том, что IDE выполняет отслеживание за вас, неверен. Большинство IDE фактически не имеют такой функциональности, кроме неограниченного количества уровней отмены. Подумайте о ветвях, слияниях, возвратах, сообщениях фиксации (журналах) и тому подобном, и я уверен, что даже IDE, на которую вы ссылались, не справляется. Особенно я сомневаюсь, что он отслеживает ваши коммиты - вполне возможно, в нескольких разных ветках, над которыми вы работаете, - и должным образом отправляет их в репозиторий, когда вы выходите в онлайн.
Если ваша IDE действительно делает все это, я бы фактически назвал это распределенной системой контроля версий.
Наконец, если центральный репозиторий умирает по какой-либо причине (ваш провайдер услуг обанкротился, произошел пожар, хакер его испортил, ...), у вас есть полная резервная копия на каждой машине, которая недавно вытащила репозиторий. .
РЕДАКТИРОВАТЬ: Вы можете использовать DVCS как централизованный репозиторий, и я бы даже рекомендовал делать это, по крайней мере, для проектов малого и среднего размера. Наличие одного центрального «авторитетного» репозитория, который всегда находится в сети, упрощает многие вещи. И когда эта машина выходит из строя, вы можете временно переключиться на одну из других машин, пока сервер не будет исправлен.
DVCS очень интересен для меня, так как он:
добавляет совершенно новое измерение к процессу управления исходным кодом : публикация .
У вас есть не только рабочий процесс слияния , но и рабочий процесс публикации (в какой репозиторий вы будете нажимать / извлекать), и это может иметь множество последствий в перспективе of:
предлагает новый способ создания / использование ревизий с:
Это означает, что вы не зависите от других, доставляющих свою работу в центральное репо, но можете иметь более прямые отношения с разными участниками и их репозиториями.
Если вы не понимаете ценности местной истории или местных построек, то я не уверен, что любое количество ответов на вопросы изменит ваше мнение.
Функции истории IDE ограничены и неуклюжи. Они не похожи на полнофункциональные.
Один из хороших примеров использования этого материала - в различных проектах Apache. Я могу синхронизировать репозиторий git с репозиторием Apache svn. Затем я могу неделю поработать в частном филиале. Я могу выгружать изменения из репо. Я могу сообщить о своих изменениях в розницу или оптом. И когда я закончу, я могу упаковать их в один коммит.
Интересный вопрос.
Я не опытный пользователь DVCS, но мое ограниченное знакомство с ним очень положительно.
Мне нравится возможность двухэтапной фиксации. Меня это устраивает.
Некоторые преимущества, которые приходят на ум:
Лучшая поддержка слияния. Branch-Merge больше похож на гражданина 1-го класса в DVCS, тогда как по моему опыту централизованных решений я обнаружил, что это болезненно и сложно. Теперь в svn доступно отслеживание слияний, но оно по-прежнему медленное и громоздкое.
Большие команды. DVCS не только для однопользовательских коммитов. Вы можете отправлять и вытягивать коммиты между командами, прежде чем вносить свой вклад в главный репозиторий (или нет). Это бесценно для определенных видов сотрудничества.
При работе над экспериментальной функциональностью имеет смысл совершать коммиты часто, но только на короткий срок. Я не хочу всегда разветвлять основную кодовую базу, поэтому приятно иметь возможность играть и перезаписывать. Точно так же я вижу, что это полезно при работе с непрерывной интеграцией. Если я целыми днями работаю над рефакторингом, я могу прервать сборку на неприемлемый срок, но я все равно хочу отслеживать свои изменения.
Обратите внимание, что мой опыт работы с DVCS больше связан с Mercurial, чем с Git.Исходя из опыта работы с CVS / SVN, я обнаружил, что обучение с Mercurial (Hg) намного проще. Недавно добавленная поддержка Google Code для Mercurial также является благом. ... Я даже могу сказать, что мой первоначальный ответ на Git был отрицательным, но больше с точки зрения удобства использования, чем с точки зрения удобства использования. делать с DVCS
Интересно отметить, что в будущем Subversion, вероятно, получит такие вещи, как автономные коммиты . Конечно, мы не можем сравнивать эти функции с тем, что доступно сегодня, но это может быть очень хорошим способом «использовать DVCS централизованно», как описано в других ответах здесь.
В другом недавнем сообщении говорится, что Subversion не пытается стать DVCS.
Эти вещи, вероятно, будут означать, что репозиторий все еще централизован, что означает, что вы не можете выполнять отключенное ветвление, различать старые версии , но вы можете поставить в очередь коммиты.
Я был там, где вы сейчас, и скептически отношусь к использованию распределенного контроля версий. Я прочитал все статьи и знал теоретические аргументы, но меня это не убедило.
Пока однажды я не набрал git init
и внезапно не оказался внутри репозитория git.
Я предлагаю вам сделать то же самое - просто попробуйте. Начните с небольшого хобби-проекта, просто чтобы научиться. Затем решите, стоит ли использовать его для чего-то большего.