С точки зрения менталитета иногда полезно иметь возможность создавать мягкую ветвь, выполнять все изменения в мягкой ветке, проверять результат изменений в мягкой ветке, а затем, когда мягкая ветвь "завершено", реинтегрируйте его с основной ветвью локально, повторно протестируйте, а затем распространите.
В некоторых случаях это лучше, чем спешная голова, потому что у вас нет постоянного прерывания существования чужого отладочного кода, запутывающего ваш код для добавления ошибок, которые нужно обработать.
Это также означает, что вы можете совершать коммиты чаще, предоставляя более полную историю, потому что коммиты не появляются мгновенно, создавая проблемы.
Кроме того, при согласовании программной ветви с общей магистральной линией вы увидите хороший полный набор изменений, показывающий вам как все ваши коллективные изменения, так и все их коллективные изменения, что открывает возможность для хороших возможностей просмотра кода. ,
Кроме того, с точки зрения тестирования, если у вас есть больше мягких ветвей, вы можете запустить тесты на мягких ветвях, прежде чем объединять их с основной ветвью, и иметь стандарт, по которому ветвь не сливается обратно. в основную ветку, пока не будет
- Пройдены тесты самостоятельно
- Пройденные тесты после того, как изменения основных веток были согласованы с мягкой ветвью
Таким образом, вы получаете дополнительную гарантию качества кода, так как ваша основная ветвь для совместной работы очень скрипуча, потому что в ней не разрешается появляться неисправный код.
(Что также ограничивает область решения проблем, потому что вам нужно по большей части тестировать только свои собственные изменения, а когда вы «сделали», только тогда вам нужно беспокоиться о том, что сделали все остальные, и что они также должны проходить тесты, что означает, что когда не терпит неудачу, вам нужно только посмотреть, что вы сделали, чтобы решить проблему)
Но буду ли я постоянно обновляться с
центральная репо в мою мягкую ветку?
Это действительно суть моего
проблема
Прелесть филиальной системы в том, что вы можете при необходимости вытянуть «все, что было сочтено стабильным другими», в свою локальную копию.
«Непрерывное обновление» становится ненужным, потому что у вас не возникают те же проблемы.
a b center
|
|
/ Key: / - | \ = Flow
/----<---| < > = Flow Directions
| /--<--/ * = Commit
* | | T = Test
| * | M = Merging with "Current" state of common branch
* | | C = Tests Complete and Current state is "sane"
| * |
T | |
| T |
| C |
| |/-<--/
* M |
| T |
* C |
| \--->-\
* /---<-/
T | |
C * |
|/-----<-/
M | |
T * |
| T |
* C |
| |/-<--/
* M |
T T |
C \-->--\
|/---<---/
M |
T |
C |
\---->---\
|
Кроме того, из-за того, как работает система, позже это также может произойти:
a b center
| | |
T | |
C * |
|/</ |
M | |
| * |
T |
C |
|/----<--/
M |
T |
C |
\-->-----\
|
Вся концепция того, что они являются "головой" в таком сценарии, исчезает. Это десятки голов, которые вы видите перспективными.
Я мог бы также добавить, что эти логические ветви, хотя и отображаются здесь как отдельные, вполне могут представлять либо отдельные места для оформления покупок, либо просто разные мягкие ветви на отдельной машине. На самом деле a & b может быть одним разработчиком.
По сути, «Постоянно обновлять мою программную ветвь из основной ветки» концептуально не имеет смысла. Потому что на самом деле, будут изменения, которые еще не представлены в основной ветке, и когда вы узнаете, что они были перенесены или нет? SVN дает вам эту ложную иллюзию «единичного» состояния кода, когда в действительности, когда один пользователь открывает файл в своем текстовом редакторе, он фактически создает мягкую ветвь с очень коротким сроком службы, происходящее изменение, о котором никто не знает, и чтобы эта иллюзия была поддержана так, как вы думаете, она работает, по сути, пользователь должен фиксировать после каждого персонажа, что вряд ли практично. Таким образом, на самом деле люди привыкли к тому, что разные места «несинхронизируются» друг с другом, и изучают способы их решения, чтобы больше не было проблем.
Кроме того, «постоянное обновление моего дерева с изменениями всех остальных» имеет ключевую проблему: у вас слишком много отвлекающих факторов, вас постоянно бомбардируют все, что делают все остальные, и если они делают серия из 1 строки обязуется протестировать что-то, что они не могут протестировать на своей машине, тогда у вас будет кошмар с постоянно меняющимся файлом, и пользователи, видящие случайные изменения, не смогут их понять.
Если разрешить более длительный запуск между фиксациями, а затем увидеть чистый результат в пакетах и увидеть только net result изменений ваших пиров сразу, вы сразу увидите, какой код После того, как вы проверили, и изменилось общее представление о том, что это значит для вашего кода, вы можете просто написать свой собственный код и покончить с ним.
Если у вас есть какие-либо сомнения
Начните с чего-то простого и не переходите к «холодной индейке», некоторые концепции в DSCM могут быть немного пугающими (я видел трагический отказ многих понять концепцию вертикально сложенных мягких ветвей), переместить Небольшая несущественная часть кодовой базы для Git / Mercurial и немного поиграйте с ней, поэкспериментируйте с преимуществами и тем, что он может сделать. Нет лучшего доказательства, чем испытать это на себе, и все мои милые объяснения вряд ли дадут вам то, что вам нужно понять, и выучить их можно только, попробовав его и потерпев неудачу несколько раз (потому что неудача является ключевой частью обучения)