как работать с другими разработчиками, используя рабочий процесс стабильной ветки hg по умолчанию

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

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

Я проверил это с тремя репозиториями

1, Base
2, devA   ---> stands for developer A's repo
3, devB   ---> stands for developer B's repo

Сначала я работал над devA, внося изменения в ветку default devA и исправлял ошибки в ветке stable devA. После этого я пушу devA в Base.

график devA:

график DevA

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

@    summary:     Merge with stable
|\   tag:         tip
| |  parent:      4:d2973e149720
| |  parent:      5:3788143e99fc
| |  date:        Mon Jul 30 13:17:44 2012 +0800
| |  
| |
| o  changeset:   5:3788143e99fc
| |  branch:      stable
| |  parent:      3:4a955d01ea44
| |  date:        Mon Jul 30 13:17:19 2012 +0800
| |  summary:     fix a bug in featureA
| |
o |  changeset:   4:d2973e149720
| |  parent:      2:8e106fcfa9bf
| |  date:        Mon Jul 30 13:16:46 2012 +0800
| |  summary:     finish featureA advance
| |
| o  changeset:   3:4a955d01ea44
|/|  branch:      stable
| |  parent:      1:7b81b986d485
| |  parent:      2:8e106fcfa9bf
| |  date:        Mon Jul 30 13:16:01 2012 +0800
| |  summary:     Merge with default
| |
o |  changeset:   2:8e106fcfa9bf
| |  parent:      0:7d7dc422ec7c
| |  date:        Mon Jul 30 13:15:43 2012 +0800
| |  summary:     finish feature A
| |
| o  changeset:   1:7b81b986d485
|/   branch:      stable
|    date:        Mon Jul 30 13:14:49 2012 +0800
|    summary:     Create stable branch
|
o  changeset:   0:7d7dc422ec7c
   date:        Mon Jul 30 13:14:21 2012 +0800
   summary:     Init commit

а потом я перешел на devB, так как хочу эмулировать параллельную работу, поэтому не стал тянуть с Base, вместо этого начинаю работать на ветке default devB, а на ветке stable devB делаю багфикс.

График devB похож на график devA

Вот проблема, когда я пытаюсь отправить изменения devB в Base, он говорит, что есть конфликт, и мне нужно объединить его локально, я вытащил изменения, а затем мой график истории в devB стал немного беспорядочным, потому что я получил default devA. и stable, поэтому в devB теперь есть две ветки default и две ветки stable.

что меня смутило, так это то, как в реальных проектах используется такой рабочий процесс, график ветвей mecurial здесь. Вроде все чисто, но как они это сделали?


person shengy    schedule 30.07.2012    source источник


Ответы (2)


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

person Oleg V. Volkov    schedule 30.07.2012
comment
но это приведет к огромному количеству ветвей, которые я не могу удалить, возможно, это хороший способ, но я не понимаю, как tortoishg и mercurial используют рабочий процесс default stable ветвей. - person shengy; 30.07.2012
comment
@shengy, они станут одним целым по умолчанию при слиянии. Обратите внимание, что есть только строка после изменения 6. - person Oleg V. Volkov; 30.07.2012
comment
Эм... Я не понимаю, что вы имеете в виду, не могли бы вы объяснить это подробнее? или опубликовать ответ? - person shengy; 31.07.2012
comment
@shengy, когда вы закончите с веткой и объедините ее где-то еще, вероятно, default, она не станет закрытой веткой. На графике обе линии просто соединяются в одну, а затем продолжаются как одна линия/ветвь. - person Oleg V. Volkov; 31.07.2012
comment
но если у меня есть 10 функций, и я должен объединить их 10 раз, все в порядке, если у меня есть ошибка в feture 1, я должен обновить до функции 1, исправить ошибку и снова объединить ее, это приведет к огромному количеству филиалов и сделать график истории центрального репо все более и более сложным. Я могу каким-либо образом отправить объединенную локальную ветку по умолчанию только на сервер? - person shengy; 31.07.2012
comment
@shengy, объединись непосредственно перед выпуском и забудь об объединенной ветке. Выделите новую ветку для исправления ошибок. - person Oleg V. Volkov; 31.07.2012
comment
так эти ветки функций перенесены в центральное репо? - person shengy; 31.07.2012
comment
Так эти ветки функций помещаются в центральное репо? Да. Просто закройте эти ветки, чтобы удалить их из завершения инструментов. - person gavenkoa; 18.09.2014

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

Добавлен --erase для действия завершения. С помощью этой опции вы стираете (т. е. полностью удаляете из репозитория) ветку после ее успешного завершения. Конечный эффект выглядит так, как если бы все изменения в ветке были свернуты, а затем зафиксированы как единый набор изменений в ветке назначения, с которой ветка была объединена. Ознакомьтесь с hg flow help @finish для более подробной информации.

person Community    schedule 26.10.2012