Недавно я обсуждал dvcs с коллегой, потому что наш офис начинает рассматривать переход с TFS (мы магазин MS). При этом я очень запутался, потому что он сказал, что, хотя он использует Mercurial, он не слышал о командах «ветка» или «оформить заказ», и эти термины были ему незнакомы. Задумавшись, как это возможно, что он не знал о них, и объяснив, как ветки dvcs работают «на месте» в ваших локальных файлах, он был в замешательстве.
Он объяснил, что подобно тому, как работает TFS, когда он хочет создать «ветку», он делает это путем клонирования, поэтому у него есть полная копия репо. Мне это показалось очень странным, но я должен признать, что вы можете одновременно работать с двумя ветвями, потому что файлы разные.
Когда я искал этот сайт, чтобы узнать, спрашивался ли он об этом, до того, как я увидел комментарий, что многие интернет-ресурсы продвигают эту методологию "клонирования в ветку", к ужасу автора. Это на самом деле распространено в сообществе dvcs? И каковы некоторые плюсы и минусы такого пути? Я бы никогда этого не сделал, поскольку мне не нужно видеть несколько веток одновременно, переключение происходит быстро, и мне не нужны все клоны, заполняющие мой диск.
git
работает. Сhg
этим обычно учат первый рабочий процесс, и он все еще очень полезен.Ответы:
Помимо общего преимущества / недостатка возможности видеть обе ветви, я думаю, что для этого есть специфическое для Mercurial преимущество.
Если вы клонируете, чтобы создать ветку, вы можете удалить клон позже, если не хотите сохранять свои изменения. Если вы решите объединить их, то тот факт, что вы решили отделить свои изменения таким образом, не виден никому другому.
Напротив, если вы используете
hg branch
для создания новой именованной ветви, имя ветви записывается в историю, когда вы фиксируете ее, видно всем и должно быть достаточно уникальным, чтобы избежать возможной путаницы позже. Это может быть неуместно, если ваша ветвь предназначена для разработки некоторой экспериментальной функции или для изменения, которое может оказаться небольшим.Если вы используете именованные ветви для поддержки выпущенных версий вашего программного обеспечения, а также используете их для разработки краткосрочных функций или исправлений, легко запутаться, потому что нет никакого способа (кроме соглашений об именах) разделить эти два вида ветвей.
http://mercurial.selenic.com/wiki/StandardBranching объясняет это более подробно. Также стоит упомянуть, что начиная с Mercurial 1.8, можно создать закладку (
hg bookmark
) - одноразовое имя для кратковременной ветви. Закладки можно нажимать, тянуть, перемещать и удалять.источник
git
, привыкнув к нимhg
. Кроме того, необходимость помнить, чтоgit branch
каждый раз, когда я хочу создать ветку, раздражает, по сравнениюhg
с автоматическим созданием неназванных веток.Каждый раз, когда вы делаете коммит в DVCS, вы технически делаете ветку в истории, каждый раз, когда вы возвращаете его в благословенный репозиторий, вы интегрируете его обратно, вот вам интересная часть:
Помните кнопку «fork» в Bitbucket / github ?, разветвление можно рассматривать как синоним ветвления, а то, что делает кнопка «fork», является просто клоном этого хранилища для вашей учетной записи.
Единственное преимущество «клонирования в ветвь» - возможность работать одновременно в двух точках истории, и, как ни странно, для вашего коллеги, это общий рабочий процесс для одновременной работы в разных ветвях (без необходимости переходить назад и вперед). ).
Скажите своему коллеге, чтобы научиться ветвиться , это очень легко, здесь, есть учебник:
«Клонирование в ветвь» имеет смысл, когда вы работаете в разных ветвях одновременно или когда вы хотите попробовать эксперимент, не создавая постоянную ветвь в истории, и при этом сможете интегрировать ее обратно в уже существующую ветвь. ,
Мне лично не нравится эта практика, и я предпочитаю делать ветки и закрывать их при необходимости. Вот как вы это делаете:
Надеюсь, что это очистит ваши сомнения по ветвлению DVCS, здесь ветки больше не страшны.
источник
Лично я бы не беспокоился о том, что код заполняет мой диск ... во-первых, это всего лишь код, а во-вторых, вы не собираетесь хранить все свои клоны вечно.
Эта методология продвигается во многих онлайн-ресурсах, особенно для Hg. Я никогда не видел, чтобы он использовался в производстве, в средах CI гораздо чаще встречаются кратковременные ветви функций, чем дополнительные клоны репозитория. Я не вижу преимущества в том, чтобы делать это, если что-то делает вашу историю более запутанной, а не менее, и это также ничего вам не дает. Если вы хотите посмотреть на свой новый код бок о бок со старым кодом, вы можете использовать инструмент сравнения / слияния для просмотра двух коммитов рядом друг с другом, с дополнительным преимуществом, что вы увидите, что ваши изменения выделены.
источник
hg
. Возможность перемещаться между несколькимиhg
репозиториями может быть действительно мощным инструментом для совместной работы. Только возможность извлекать из непрозрачныхgit
репозиториев может существенно ограничить ваши возможности с таким рабочим процессом.