SVN лучшие практики - работа в команде

Я начинаю с SVN. Я знаю основные команды и понимаю базовые принципы. Мне было интересно, есть ли у кого-нибудь советы или рекомендации по работе с Subversion в командной среде.

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

Спасибо за все замечательные ответы - они очень помогли.

Ответ 1

Поощряйте частые коммиты. Новые участники управления версиями могут чувствовать, что им нужно сохранить код из репозитория, пока он не будет работать правильно. Научите всех совершать ранние и часто, чтобы найти проблемы как можно скорее. Вместо того, чтобы держать код "пока он не работает", предложите, чтобы ваши товарищи по команде создавали ветки для функции, которая могла бы разорвать багажник. Это приводит к...

Создайте практику ветвления и пометки. В дополнение к ветвям для функций, поощряйте своих товарищей по команде использовать ветки для исправлений с большой ошибкой. Исправьте основные ошибки в начале и в конце работы. Ведите теги (и, возможно, ветки) для выпуска продукции /qa.

Установите политику для соединительной линии и придерживайтесь ее. Один пример может быть: "соединительная линия всегда должна строиться без ошибок". или "багажник должен всегда проходить все модульные тесты". Любая работа, которая еще не может соответствовать стандартам магистрали, должна выполняться в ветке.

Ответ 2

Не выполнять изменения форматирования с изменениями кода

Если вы хотите реструктурировать гигантское прошивное пространство файла (Control + K + D), то хорошо. Зафиксируйте изменение форматирования отдельно от фактического логического изменения. То же самое происходит, если вы хотите перемещать функции в файлах. Зафиксируйте перемещение отдельно от фактического редактирования.

Ответ 3

Одна из ключевых концепций, которые я всегда придерживаюсь, - это скопировать связанные изменения кода вместе. Следствие не допускает несвязанных изменений кода в одном и том же commit. Это означает, что вы не исправляете 2 ошибки в одном коммите (если это не то же самое исправление) и не фиксируете половину ошибки в каждом из двух коммитов. Кроме того, если мне нужно добавить какое-то новое усовершенствование или что-то в несвязанную часть системы, которую мне тогда нужно для какой-то другой работы, я фиксирую ее отдельно (и сначала). Идея состоит в том, что любое изменение, которое любой человек может себе позволить самостоятельно (или откатить сам по себе), должно быть отдельным фиксацией. Это сэкономит вам массу головных болей, когда придет время делать слияния или откатывать нарушенные функции.

Ответ 4

Уже упоминалось много, и вот еще несколько:

  • Если у вас есть файлы, которые вам не нужны в исходном управлении (например, в конфигурации, скомпилированных файлах и т.д.), добавьте их в список игнорировать. Таким образом вы замечаете любые файлы, которые вы забыли добавить, всегда ожидая пустого списка файлов, отображаемых как неизвестные SVN.

  • Добавьте событие post commit, которое отправит электронное письмо в список рассылки разработчиков (или один конкретный для этой цели), относящийся к совершенному изменению, и в идеале патч для него.

  • Интеграция с вашим трекером ошибок, чтобы ссылки на коммиты отображались в сообщениях об ошибках/функциях с ссылками на diff. Трекеры ошибок, такие как MantisBT поддерживают это.

  • Рассмотрим интеграцию с непрерывным интегрированием (например, CruiseControl.NET), NAnt для сборки и NUnit/VS для модульных тестов, Таким образом, как только код регистрации пользователя или на запланированный интервал скомпилируется код, выполняются модульные тесты, и разработчик получает обратную связь от процесса. Это также предупреждает остальную часть команды, если репозиторий нарушен (т.е. Не создается).

Ответ 5

Ну, основы:

  • Создайте теги перед началом QA в версии
  • Создайте теги перед рискованными изменениями (то есть большими рефакторами)
  • Создайте ветки для выпущенных версий, чтобы заморозить код.
  • Перед тем, как приступить к работе над фрагментом кода и обновите его, убедитесь, что пользователи знают, что нужно его обновить.
  • SVN позволяет несколько проверок одного и того же файла разными пользователями. Убедитесь, что каждый разрешает любой конфликт, который может произойти.
  • Никогда использовать одну и ту же учетную запись SVN для нескольких пользователей. Это может привести к ужасным последствиям.

Ответ 6

Ответы, которые дают люди, велики. Большая часть этого суммируется в svn user doc для лучших практик для SVN.
Повторить:

  • Настройте структуру своего репозитория (у вас должен быть корень проекта с сундуком, ветвями и тегами под ним)
  • Выберите разветвление политики (частные ветки, ветки на веху/выпуск/ошибка, и т.д.) и придерживаться его - я бы рекомендуют больше разветвлений, а не меньше, но нет необходимости в частных ветки
  • Выберите свою политику повторно tagging - больше тегов, тем лучше, но самое главное принять решение по вашему тегу соглашения об именах
  • Выберите свой политика, переходящая в багажник - держите сундук как можно "чистым", он должен быть доступен при любой время

Ответ 7

Я хотел бы обобщить рекомендации, которые я придерживаюсь:

  • Не выполнять бинарные файлы. Должен быть отдельный репозиторий для двоичных файлов, таких как Nexus, Ivy или Artifactory.
  • Структура структуры должна быть . Лично я использую следующую структуру репозитория:

    /trunk
    /tags
        /builds
            /PA
            /A
            /B
        /releases
            /AR
            /BR
            /RC
            /ST
    /branches
        /experimental
        /maintenance
            /versions
            /platforms
        /releases
    
  • Используйте специальный список типов ветвей. Мой список следующий: экспериментальный, техническое обслуживание, версии, платформы, релизы.
  • Используйте специальные типы тегов: PA (pre-alpha), A (альфа), B (бета), AR (альфа-релиз), BR (бета-релиз), RC (кандидат на выпуск), ST (стабильный).
  • Свести к минимуму необходимость слияния. Должны быть правила, когда объединение возможно/рекомендуется, а когда нет.
  • Нумерация версий. Должен быть установлен подход к нумерации версий. Обычно он описан в таком документе, как "План управления конфигурацией программного обеспечения", он является частью проектной документации высокого уровня. Лично я использую комплексный подход к нумерации версий. Согласно этому подходу версии имеют следующие шаблоны: Nxx (ветки поддержки/поддержки), NMx (ветвь освобождения), NxK (сборка), NMK (выпуск).
  • Зафиксировать как можно чаще. Если это имеет тенденцию быть трудным (например, когда должно быть сделано слишком много изменений для реализации функции и даже компиляции кода), следует использовать экспериментальные ветки.
  • Магистраль должна содержать самую последнюю разработку. Например, когда есть выбор, где разрабатывать новую основную версию (N.x.x) приложения, в багажнике или в филиале, решение должно всегда приниматься в пользу магистрали. Старая версия должна быть разветвленной в ветку обслуживания/поддержки. Он предполагает, что существует четкое различие между основными версиями и их спецификой (архитектура, совместимость) как можно раньше.
  • Строго "не нарушать политику сборки в ветвях выпуска. В то же время, это не обязательно должно быть строгим для туловища, если оно может иметь либо экспериментальную разработку, либо кодовую базу, которая должна решать проблемы слияния.
  • Используйте svn: внешние. Это позволит модулизовать ваш проект, установить прозрачную процедуру управления выпуском, разделить и преодолеть различные функциональные возможности.
  • Используйте отслеживание проблем. Вы можете указать ссылку на проблему внутри сообщения фиксации.
  • Отключить пустые сообщения о фиксации. Это можно сделать с помощью перехватов с фиксацией.
  • Определите , из каких ветвей вы хотите непрерывно интегрировать. Например, я предпочитаю использовать непрерывную интеграцию для ветвей, обслуживаний и релизов.
  • Установите политику непрерывной интеграции для разных типов веток. Как я уже указывал ранее, самые строгие правила "не нарушайте сборку" применяются для освобождения веток, в то время как ветки ствола и обслуживания иногда могут быть повреждены. Также существует разница между списком проверок, выполняемых на ветках магистрали/обслуживания и выпуска.

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

Ответ 8

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

  • Если у вас есть отдельные репозитории для кода, разные модули/библиотеки и ссылка в тех, которые вы используете. Это означает, что у вас может быть мета-репозиторий для каждого исполняемого файла. Если это небольшой исполняемый файл, который использует только несколько модулей, вам не нужно проверять все дерево. В результате вы получаете номера версий SVN для каждого модуля.
  • Добавление больших двоичных данных, таких как скомпилированные версии библиотек в репозиторий кода, обычно считается плохой привычкой, но это может быть очень удобно. Если вы просто добавляете все версии всех библиотек, которые вы используете в другой репозиторий, вы можете получить лучшее из двух миров. Вы ссылаетесь на версии библиотек, которые вы используете в своем репозитории кода. При проверке вашего репозитория кода вы получите как код, так и двоичные файлы. Однако двоичные файлы хранятся в большом репозитории, который вам не нужно резервировать так строго, как ваш исходный код, а репозиторий исходного кода остается небольшим и содержит только текст.

Ответ 9

Используйте интеграцию с программным обеспечением отслеживания ошибок. Если вы используете Bugzilla, вы можете настроить его, поэтому, если ваш комментарий начинается с "Bug XXXX", ваш комментарий SVN автоматически добавляется как комментарий к данной ошибке, включая ссылку на веб-интерфейс SVN для этой версии.

Ответ 10

Узнайте о SVN-ветвях и слияниях и соглашениях.

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

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

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

Ответ 11

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

Я рекомендую Tortoise SVN (если вы используете Windows) и Visual SVN (если вы используете VS).

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

Ответ 13

Помимо ветвящихся политик и др. (где один размер определенно не подходит для всех), у вас должны быть хорошие коммиты:

  • Фиксирование должно относиться к одной части работы, если это возможно; исправление ошибки, новая функция - должна быть какая-то "логика", какие изменения вы совершили.
  • Фиксирование должно содержать описательный комментарий, который поможет вам найти его в истории хранилища. Большинство людей предлагают написать одно предложение в начале, которое описывает всю фиксацию и более подробную учетную запись ниже.
  • Если возможно, вам следует привязать фиксацию к вашей системе отслеживания ошибок, если это возможно. Trac, Redmine et al. позволяют создавать ссылки с ошибок на коммит и наоборот, что очень удобно.

Ответ 14

Проконсультируйтесь с вашей командой об их изменениях или, по крайней мере, посмотрите на diff очень тщательно, прежде чем устанавливать какие-либо конфликты слияния. Попросите их просмотреть сам скомпилированный код, чтобы убедиться, что их добавления не были потеряны в слиянии.

Ответ 15

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

Ответ 16

Одним из примеров интеграции с принудительным выполнением ошибок и фиксации политики может быть Trac svn pre/post-commit hook scripts, который может отказать в фиксации, если сообщение фиксации не ссылается на какой-либо билет в контролере ошибок и добавлять комментарии к существующим билетам на основе содержимого сообщения (например, сообщение фиксации может содержать что-то вроде "Исправления №1, №2 и №8", где # 1, № 2, №8 - номера билетов).

Ответ 17

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

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

Будет очень рано говорить о том, кто следит за вашим процессом, а кто нет. Может привести к некоторому трению, но ваша команда будет лучше в долгосрочной перспективе.

Ответ 18

  • Точный комментарий для каждой фиксации

  • Не нарушайте строчку (mainline)!

  • Зафиксируйте, как только логический блок изменит

  • Избегайте использования Subversion в качестве инструмента резервного копирования

  • Небольшое разветвление/слияние по возможности

.

Более подробную информацию можно найти в лучшие практики SVN.

Ответ 19

Лучшая практика использования SVN:

  • Когда вы впервые пришли в офис и откройте проект Eclipse, первым шагом должно быть обновление ваш проект.

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

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

  1. Не выполняйте/обновлять файлы конфликтов напрямую.

  2. Когда делать переопределение и обновление?

    Когда вы в значительной степени уверены, что вам не нужен какой-либо из ваших локальных изменения и хотите полностью обновить копию сервера. Запишите, что один раз, если вы выполните переопределение и обновление, вы не получите ни одного из ваших локальные изменения.

    Примечание. Не оставляйте проект без обновления более одного дня. Также не храните код без фиксации в течение многих дней.

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

  4. Не выполняйте свойства и файл конфигурации, если не будет причин. Поскольку настройки будут отличаться на сервере и в облаке.

  5. Не сохраняйте целевые папки в SVN, в репозитории SVN необходимо сохранить только исходный код и папки ресурсов.

  6. Когда вы потеряли свой код, не паникуйте! Вы можете вернуть предыдущую копию из истории SVN.

  7. Не проверяйте проект на несколько мест вашего диска. Оформить заказ в одном месте и работать с ним.


Ответ 20

Используйте это для шаблона комментариев:

[task/story xxx] [minor/major] [комментарий] [комментарий] [URL to bug]

Ответ 21

Работает ли DEV на ветвях

  • Частая связь с вашей веткой
  • Дискретный/модульный фиксирует вашу ветку (см. здесь)
  • Часто обновлять/объединять - с соединительной линии. Не сидите на своей ветке без повторного базирования.

Сетевой соединитель

  • Всегда следует создавать/работать
  • Один вопрос за фиксацию (снова см. здесь) В основном, чтобы вы или другие люди могли возвращать вещи за один раз
  • Не перепутайте изменения рефакторинга/пробелов с логическими изменениями. У ваших товарищей по команде будет трудное время, извлекая то, что вы на самом деле сделали из фиксации.

Помните, что чем больше инкрементных, модульных, дискретных и кратковременных вы сделаете свои коммиты, тем легче вам (или, возможно, другим):

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