Git-теги на самом деле не предназначены для того, чтобы их можно было ставить на множество таких коммитов.Вместо этого я бы предложил интегрировать ваши тесты valgrind и т. Д. В рабочий процесс, а не в вашу ветку.Если вы уверены, что ваши коммиты будут успешно скомпилированы, вы можете автоматически запустить свои тесты, и, если они пройдут, вытащите из development
до passed-unit-test
- задание cron или подобное, если время, затраченное на запуск тестов, является проблемой,
Вы можете использовать git hook, чтобы запретить нажатия в ветку passed-unit-test
, если не пройдены модульные тесты.
Тогда у вас будет ветвь, которая будет содержать только код, прошедший тесты.Это более точное решение, чем добавление тегов или добавление тегов вообще.
Редактировать:
Другими словами, мне нужно только один раз перейти от мастера к разработке в начале этого рабочего процесса, верно?
Да.development
сворачивает в master
, master
только выталкивается в development
в начале (и, если применимо, , если естьисправления - это может не относиться к вам, хотя).
Более подробное объяснение и обоснование : Я бы использовал рабочий процесс, основанный в значительной степени на потоке Nvie Git Flow .(Соответствующие сценарии расположены здесь ).Это достаточно хорошо используется , и об этом рабочем процессе написано множество материалов, таких как this (jeffkreefmeijer.com) и this (vimeo.com),если вы хотите получить четкое понимание методологии и обоснования рабочего процесса.Этот тип рабочего процесса дает вам сразу несколько очевидных преимуществ:
- У вас есть очевидная ветвь "выпуска" (т. Е.
master
).Это решает ваши сомнения относительно стратегий слияния. - Весь рабочий процесс основан на получении
features
слияния в master
через release candidate
ответвления - слот в соответствующих тестах концептуально прост.
Итак:
Часть, в которой я запутался, заключается в том, что, когда я объединяю U4 с M2, я должен снова разветвляться или я могу просто продолжать работать с U4commit U5, U6 и т.д ...?
Предполагая, что вы работаете с моделью с двумя ветвями, подобной Nvie Git Flow, что-то вроде этого будет работать:
M
| \
| U // Branch Unstable off Master to begin with.
| |
| U1 // Finish commit series between U and U1; commit to Master
| /|
M1 |
| U2 // Finish commit series between U1 and U2; commit to Master
| /|
M2 |
-etc-
Ваша ветка разработки, которую я буду называть unstable
, чтобы ответить на этот вопрос, получает ответвление master
(потому что вы продолжаете разработку кода, который вы выпустили; код, который вы выпустили, т.е.«хороший» код, находится в master
) в начале.
После этого master
не возвращается к development
.Причина этого довольно проста;master
- это место, где находится ваш "хороший" код.Вы не должны редактировать этот код напрямую.(Кроме того, master
является отличным местом для пометки).
Исключением для этого являются исправления ошибок;это зависит от того, насколько близко вы следуете модели Git Flow.Однако, если исправление является срочным, вы, вероятно, захотите сделать исправление при фиксации x
(сломанной), а не при фиксации x+nD
, где D
- коммиты разработки.Однако, как только вы исправите код, вы захотите, чтобы исправление вернулось в код development
;в противном случае вы просто создадите неработающий код.
Однако исправления и т. п. могут не иметь к вам отношения;модели с двумя ветвями, такой как та, которую вы вытащили, возможно, достаточно для вашего проекта.:)