Какие командные рабочие процессы вы используете в отношении git? - PullRequest
13 голосов
/ 19 октября 2010

Я нахожусь в процессе перевода моей команды из TFS в GIT в самом ближайшем будущем, но прежде чем я сделаю это, я хочу знать о любых подводных камнях, с которыми могут столкнуться другие при перемещении команды из централизованного контроля источников, таких какCVS, SVN, TFS и т. Д. Для распределенной системы управления версиями, такой как GIT или Mercurial.

Некоторые вопросы, которые сразу пришли в голову:

  1. Работает ли каждый пользователь изих собственная ветвь на сервере, а затем объединяются, когда они сделаны, или они просто остаются локальными на своих машинах и отправляются на сервер после завершения?

  2. Должны ли быть выполнены все новые работы по разработкеветвь (то есть «следующая версия») или это должно быть сделано против «мастера»?

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

  4. Следуйте пункту 3, если все сделано в ветке, есть ли какой-либо способ контролироватькто может сделать слияния с "master"?

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

Однако мое настоящее любопытство и вопрос касаются того, как вы управляете своими процессами рабочих процессов, касающихся GIT и других распределенных систем контроля версий, не совсем то, что соответствует моему текущему процессу рабочих процессов.

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

Однако, как говорится, я ищу более идеальный рабочий процесс ситуациипроцесс, не совсем то, что соответствует моему текущему рабочему процессу.Вот почему я назвал вопрос What team workflow processes do __you__ use concerning GIT?

Ответы [ 4 ]

6 голосов
/ 19 октября 2010

От ваших вопросов я чувствую, что ваше мышление по-прежнему относится к централизованной системе контроля версий. В распределенной системе сервер уже не «рабочее место», а просто зеркало коллективной работы. Таким образом, это даже не является строго необходимым.

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

В моей работе над своим личным репозиторием у меня есть следующие ветки:

  • master является точным отражением центральной master. Я никогда не ввязываюсь в это. Вместо этого я только вытягиваю из центрального зеркала в свой master.
  • develop-* - это набор функциональных (рабочих) ветвей, ответвляющихся от ветви release. Например, у меня может быть ветка с именем develop-foo_performance, где я настраиваю производительность класса Foo. Или у меня может быть ветка develop-cosmetics, где я накапливаю небольшие косметические коммиты. В основном это кратковременные ветви для очень специфических задач. Это черновик веток; Я фиксирую здесь все время , свободно пишу сообщения о коммите и не задумываясь о том, «является ли это изменение достойным коммита». Это моя личная, скрывающая ошибки история отслеживания Ctrl-S.
  • release - это ветвь, в которую я помещаю сквош, готовый к публикации. Когда я закончу писать свою конкретную идею для настройки производительности для Foo на ветви develop-foo_performance, я, вероятно, получу набор неорганизованных коммитов, экспериментирующих в разных направлениях. Я перебираю эти коммиты в ветку release, разбивая их на логические коммиты, ориентированные на особенности - часто на один коммит. Этот сквош отбрасывает весь код, который не оказался в конечном состоянии, поэтому история, показанная release, очень чистая и линейная; все эксперименты прошли, как будто я идеальный разработчик, который может заглянуть в будущее, никогда не ошибается и имеет потрясающе описательные коммиты. В конце дня я проталкиваю свою ветку release к центральному зеркалу, а затем достаю пульт master и объединяю его с моим master.
  • napkin - моя ветка личных заметок. Его корневая фиксация отличается от master. Я никогда не сливаю и не переделываю эту ветку в какую-либо другую, никогда не толкаю и не втягиваю в нее, никогда ничего не объединяю здесь. Здесь я храню свой файл задач, найденные ошибки, свои личные заметки, идеи, вопросы для размышлений или любые другие документы, написанные в свободной форме. Это непересекающаяся ветвь, и это для моего личного способа делать вещи: никто никогда не видит это. Это держит меня организованным и ясным.

Для любого моего проекта, будь то на работе или дома, это единственные ветви, которые у меня есть. Я только создаю новые develop-* ветви и удаляю полные и неудачные. Другие ветви никогда не умирают и никогда не перебазируют. Обратите внимание, что когда я объединяю пульт дистанционного управления master с моим master, слияние должно быть ускоренным. Это потому, что я никогда не зацикливаюсь на своем собственном master - только втягиваю в него.

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

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

4 голосов
/ 19 октября 2010

Обратите внимание, что я не использовал Git в корпоративной среде, и ответы ниже основаны на моем опыте работы над проектами OSS с Git и моем понимании Git.

См. Также gitworkflows(7) manpage.

  • Работает ли каждый пользователь в своем филиале на сервере, а затем объединяется, или они просто остаются локальными на своих машинах и нажимают накогда сервер будет готов?

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

Публикация чья-то работа может означать отправку в какой-то центральный репозиторий, или это может означать толкание для своей публикихранилище;из общедоступного репозитория этого разработчика сопровождающий (или его эквивалент) может извлекать изменения.

Ознакомьтесь с хорошим описанием (с диаграммами!) возможных рабочих процессов в Глава 5.1: Распределенные рабочие процессы из ProGit.Proffesional Version Control Книга с лицензией CC от Скотта Чакона.

  • Должна ли вся новая работа по разработке выполняться на ветке (т. Е. "Следующая версия") или против"master"?

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

[...]

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

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

2 голосов
/ 19 октября 2010

Я воспользовался этим рабочим процессом, где в нашей организации: http://nvie.com/posts/a-successful-git-branching-model/

Мы создали управление тем, кто может делать что с какой веткой через gitolite.

Это было хорошо"задний фонарь, чтобы следовать сквозь туман".С бесконечными опциями, которые дает вам Git, трудно самостоятельно принять решение о том, каким должен быть ваш рабочий процесс.Начните с этого и адаптируйтесь.Это сработало для нас очень хорошо.Мы используем стек .net со вкусом OSS (NHibernate и т. Д.)

0 голосов
/ 19 октября 2010

Git формирует в соответствии с вашими потребностями, а не наоборот (как это происходит с централизованными системами управления источниками).

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

Edit: Что касается обновления, вы можете легко сделать этот рабочий процесс в Git. Вопрос в том, что еще вы хотите от инструмента управления исходным кодом. Внесение изменений только потому, что мы хотим изменений, не очень хорошая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...