2013-04-02 2 views
1

Я использую git. На данный момент мы работаем над проектом двух членов команды. Обе работы немного независимы на данный момент, одна фокусируется на пользовательском интерфейсе, а другая - на apis. Мне нравится проверять несколько раз в день. Мой обычный рабочий процесс:git workflow, создать локальную ветку удалить и снова создать

http://amiridis.net/posts/13

Так я создаю ветвь функции, а затем работать над ним, объединить его с основной, а затем нажмите на него. Удалите ветвь и воссоздайте одну ветвь.

Продукт по-прежнему является 1-й версией, и у нас есть установка непрерывного интегрирования. Основная цель нажатия - получить инкрементные обновления для супервизоров.

Мой вопрос,

  • если я полностью не закончил функцию, это хорошая практика, чтобы подтолкнуть небольшие единицы компилируемых изменений к главному серверу на главной ветви, если она до сих пор версия 1?
  • Это хорошая практика для создания ветки, слияния с ней, ее удаления, удаления локальной ветви, а затем ее воссоздания?
+0

Вы делаете правильный путь, не беспокойтесь. ;) – uday

ответ

3

Вопрос № 1

Если я полностью не закончил функцию, это хорошая практика, чтобы выдвинуть небольшие единицы компилируемых изменений в основной сервер на главном отрасли, если он все еще версия 1?

Нет. Как правило, неверно вводить незавершенный код в основную ветку. У вас всегда должна быть ветка, которая имитирует состояние производственного кода. Для большинства людей эта ветка называется master.

Одним из примеров того, почему это важно, является случай ошибок в производстве. Если вы уже представили в своем главном филиале кучу полных работ, то любые исправления, которые вы выпускаете, также будут включать в себя незавершенную работу. Также, если другие разработчики вытаскивают из этой ветки, и вы добавили непроверенный код, вы можете усложнить их разработку.

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

Однако вы работаете, вы должны попытаться сохранить ветвь с определенным уровнем «авторитета» - веткой, которая сливается только после выполнения некоторых критериев. Каковы эти критерии, зависит от вас.

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

Вопрос № 2

Это хорошая практика, чтобы создать ветвь, сливаются в основном, нажмите на нее, удалить локальную ветку, а затем воссоздать его?

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

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

Workflow относится

У вас есть небольшая группа и код Isnt в дикой природе пока - так давление будет ниже, и решение будет легче, потому что его просто вы два. Однако, как только ваш продукт попадет в мировое давление, будет больше, чтобы решить проблемы - потребность в выпуске исправлений/патчей, вероятно, будет достигнута. Цикл выпуска будет усложняться все более и более одновременным развитием. Сотрудничество будет более запутанным и подверженным ошибкам, поскольку вы добавляете в свою команду все больше и больше разработчиков с различным уровнем понимания контроля версий.

Так вот несколько вещей, которые я рекомендую вам учитывать при принятии решения о вашем рабочем процессе.

  • Hotfixes/Патчи - Если уже наполовину сделано с версии 2, но теперь вы нашли критическую ошибку в 1.0, как легко это для вас, чтобы выпустить v1.1 без него, включая неполную работу 2,0
  • Откат назад - если в пути появилась ошибка, можете ли вы легко вернуться из багги-версии?
  • Разделение - попробуйте не делиться сломанным или непроверенным кодом с членами команды, которые не работают над одним и тем же. Если я всегда буду тянуть ваш непроверенный код во время разработки, мне будет трудно узнать, вызваны ли ошибки мной или изменениями в другом месте кода, вызванным другим членом команды. Я должен только вытащить код других людей, как только он будет проверен и проверен. Сохраняя ветви на короткое время и делая небольшие, легко проверяемые изменения - те проверенные обновления быстрее достигнут ваших товарищей по команде, и ошибки будут обнаружены раньше.
  • Сотрудничество. Иногда людям действительно нужен код друг друга, чтобы продолжить свою работу. Вот почему важны недолговечные небольшие изменения. Однако иногда два человека буквально работают над одним и тем же - они работают вместе с одинаковой функциональностью. В этом случае для них разумно работать с той же удаленной ветви. Однако имейте в виду, что git-reset, git-rebase, выполнение принудительного нажатия или выполнение чего-либо, что изменяет фиксацию на удаленном компьютере, заставит вашу команду сопрягать нагрузку. При обмене веткой помните историю ветвей.
  • Сложность - члены команды будут иметь различные уровни понимания управления версиями в целом и git специально. Даже если они все эксперты git, проще, как правило, лучше всего. Количество шагов, которые должен выполнить какой-либо один человек, чтобы получить что-то проверенное, что-то слилось в авторитетную ветвь, или общий код с другими разработчиками должен оставаться как можно ниже. Его что-то каждый будет делать много раз в день. Не только сложный процесс съедает время разработчика, он будет более подвержен ошибкам всеми, но чаще всего теми, у кого меньше опыта.Эти ошибки могут вызвать еще большую задержку, поскольку другие работают над тем, чтобы разгадать проблему. Это соображение обычно работает в противовес другим, так как другие склонны предполагать добавление большего количества уровней сложности. Просто помните, чтобы держать эту сложность под контролем.

Популярный технологический процесс известен как «git flow», и есть даже command line tool, чтобы помочь автоматизировать этапы. Как небольшая команда, вы можете обнаружить ее чрезмерно сложной, но я бы предположил, что это наименее, которую вы должны делать, если у вас есть цикл релиза, основанный на итерации.

Я на самом деле не большой поклонник git-потока, но только потому, что я чувствую, что он на самом деле слишком упрощен и двумерен. (Я не поклонник «децентрализованной, но централизованной», я предпочитаю рабочий процесс, который фактически распространяется).

Однако, если у вас очень быстрый темп выпуска - в этом случае вы можете принять model that github itself uses. Их модель похожа на вашу, поскольку они просто сливаются с мастером - однако они делают это только после того, как код прошел несколько автоматических тестов. Ключевым моментом в том, что делает github, является тот факт, что они разворачиваются много раз в день, а не в цикле выпуска, как это делают большинство команд. Это делает его настолько, что ошибки, которые выходят на производство, почти всегда будут представлены недавно. Его более простая стратегия, но не для всех, помните о баллах выше, особенно если у вас более типичный цикл выпуска.

+0

Отредактирован ответ, чтобы включить еще одно соображение: Сложность. – eddiemoya

Смежные вопросы