Как использовать SVN, Branch? Тег? Ствол?

163

Я немного погуглил и не смог найти хорошее руководство для начинающих по SVN , скорее, не в смысле «как использовать команды»; Как я могу контролировать свой исходный код?

Я хотел бы прояснить следующие темы:

  • Как часто вы совершаете? Так часто, как можно было бы нажать Ctrl+ s?
  • Что такое ветка и что такое тег и как вы им управляете?
  • Что входит в SVN? Только исходный код или вы тоже здесь делитесь другими файлами? (Не считаются версионными файлами ..)

Я понятия не имею, что такое ветка и метка, поэтому я не знаю цели, но мое дикое предположение состоит в том, что вы загружаете материал в ствол, а когда вы делаете основную сборку, вы перемещаете его в ветку? Итак, что считается основной сборкой в ​​этом случае?

Филип Экберг
источник
Хороший способ определить частоту коммитов - это сделать это с точки зрения слияния. Если у вас была ветвь, в которой вы должны были объединить изменения из ствола, выборка из нескольких ревизий Vs 1000 скоро поможет вам найти разумный подход.
Фил Купер

Ответы:

60

Книга Subversion является отличным источником информации о стратегиях размещения вашего хранилища, ветвления и тегирования.

Смотрите также:

Продолжаете ли вы разработку в ветке или в стволе

Стратегии ветвления

кругозор
источник
2
В частности, посмотрите на: svnbook.red-bean.com/en/1.5/…
morechilli
86

Я задавал себе те же вопросы, когда мы пришли к реализации Subversion здесь - около 20 разработчиков работали в 4-6 проектах. Я не нашел ни одного хорошего источника с «ответом». Вот некоторые части того, как наш ответ развивался за последние 3 года:

- совершать так часто, как это полезно; Наше эмпирическое правило - коммит всякий раз, когда вы проделали достаточную работу, поэтому возникнет проблема с ее повторным выполнением, если изменения будут потеряны; иногда я фиксирую каждые 15 минут или около того, иногда это могут быть дни (да, иногда мне требуется один день, чтобы написать 1 строку кода)

- мы используем ответвления, как предлагал один из ваших предыдущих ответов, для разных путей развития; прямо сейчас для одной из наших программ у нас есть 3 активных ветви: 1 для основной разработки, 1 для еще не завершенной попытки распараллелить программу, и 1 для попытки пересмотреть ее для использования входных и выходных файлов XML;

- мы почти не используем теги, хотя считаем, что должны использовать их для идентификации выпусков в производство;

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

Флаги на дороге называются «метками», а вилки на дорогах - это места, где «ветки» делятся. Иногда также ветви снова собираются вместе.

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

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

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

Высокая производительность
источник
18
* How often do you commit? As often as one would press ctrl + s?

Как можно чаще. Код не существует, если он не находится под контролем исходного кода :)

Частые коммиты (впоследствии меньшие наборы изменений) позволяют вам легко интегрировать ваши изменения и увеличивать шансы не сломать что-либо.

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

Когда я работаю над своей собственной веткой, я предпочитаю совершать как можно больше (буквально так часто, как я нажимаю Ctrl + S).

* What is a Branch and what is a Tag and how do you control them?

Прочитайте книгу SVN - это место, с которого вы должны начать изучать SVN:

* What goes into the SVN?

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

Ака
источник
11

Вот несколько ресурсов о частоте коммитов, сообщениях коммитов, структуре проекта, о том, что нужно поставить под контроль исходного кода, и другие общие рекомендации:

Эти вопросы переполнения стека также содержат некоторую полезную информацию, которая может представлять интерес:

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

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

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

Андерс Сандвиг
источник
8

Частота коммитов зависит от вашего стиля управления проектами. Многие люди воздерживаются от фиксации, если это нарушит сборку (или функциональность).

Ветви могут использоваться одним из двух способов, обычно: 1) одна активная ветвь для разработки (и ствол остается стабильной), или 2) ветки для альтернативных путей разработки.

Тэги обычно используются для идентификации релизов, поэтому они не теряются в миксе. Определение «релиз» зависит от вас.

Коди Броусиус
источник
Договорились: совершайте до тех пор, пока не сломаете сборку!
Брэндон Монтгомери
7

Я думаю, что главная проблема заключается в том, что ментальная картина контроля над исходным кодом запутана. У нас обычно есть ствол и ветви, но затем мы получаем несвязанные идеи тегов / выпусков или что-то на это влияющее.

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

Мы получаем ствол -> формы веток -> производим фрукты (теги / выпуски).

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

Теги по сути являются конечными результатами. Принимая во внимание, что ствол и ветви производят их.

Пит
источник
4

Как уже говорили другие, SVN Book - это лучшее место для старта и отличный справочник, как только вы получите свои морские ноги. Теперь на ваши вопросы ...

Как часто вы совершаете? Как часто вы нажимаете Ctrl + S?

Часто, но не так часто, как вы нажимаете Ctrl + S. Это вопрос личного вкуса и / или командной политики. Лично я бы сказал коммит, когда вы завершаете функциональный фрагмент кода, пусть и небольшой.

Что такое ветка и что такое тег и как вы им управляете?

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

Также стоит упомянуть, что в Subversion, транке, ветвях и тегах только соглашение. Ничто не мешает вам выполнять работу в тегах или иметь ветви, которые являются вашей основной линией, или игнорировать схему tag-branch-trunk полностью вместе. Но, если у вас нет очень веских причин, лучше придерживаться соглашения.

Что входит в SVN? Только исходный код или вы тоже здесь делитесь другими файлами?

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

Гордон Уилсон
источник
Часто, но не так часто, как вы нажимаете Ctrl + S. Согласовано. Вы, вероятно, должны сохранить свои изменения, чтобы увидеть эффекты. Я, вероятно, делаю это 10 раз, постепенно создавая некоторый код, прежде чем у меня есть что-то, что я могу зафиксировать и получить содержательный комментарий о том, что я сделал. Другими словами, я хочу, чтобы в моих комментариях говорилось «добавили эту функцию» или «исправили эту ошибку», а не «ковырялся в нескольких строках, не уверен, как это будет работать». Поэтому я совершаю, может быть, полдюжины раз в день.
Натан Лонг
4

Эрик Синк, который появился на SO подкасте № 36 в январе 2009 года, написал отличную серию статей под названием Source Control How-to .

(Эрик является основателем SourceGear, который продает совместимую с плагином версию SourceSafe, но без ужаса.)

Майк Вудхаус
источник
4

Просто чтобы добавить еще один набор ответов:

  • Я обязуюсь каждый раз, когда я заканчиваю часть работы. Иногда это крошечное исправление, которое просто изменило одну строку и заняло у меня 2 минуты; в других случаях это пот две недели. Кроме того, как правило, вы не делаете ничего, что нарушает сборку. Таким образом, если вам потребовалось много времени, чтобы сделать что-то, возьмите последнюю версию перед фиксацией и посмотрите, не нарушают ли ваши изменения сборку. Конечно, если я долго хожу без обязательств, мне становится неловко, потому что я не хочу терять эту работу. В TFS я использую эту замечательную вещь как "shelvesets" для этого. В SVN вам придется работать по-другому. Возможно, создайте свою собственную ветку или сделайте резервную копию этих файлов вручную на другом компьютере.
  • Филиалы являются копиями всего вашего проекта. Лучшей иллюстрацией для их использования является, пожалуй, управление версиями продуктов. Представьте, что вы работаете над большим проектом (скажем, ядром Linux). После нескольких месяцев пота вы наконец-то добрались до версии 1.0, которую вы публикуете. После этого вы начинаете работать над версией 2.0 вашего продукта, который будет намного лучше. Но в то же время есть много людей, которые используют версию 1.0. И эти люди находят ошибки, которые вы должны исправить. Теперь вы не можете исправить ошибку в следующей версии 2.0 и отправить ее клиентам - она ​​вообще не готова. Вместо этого вы должны вытащить старую копию исходного кода 1.0, исправить там ошибку и отправить ее людям. Вот для чего нужны ветки. Когда вы выпустили 1. 0 версия вы сделали ветку в SVN, которая сделала копию исходного кода на тот момент. Эта ветка была названа "1.0". Затем вы продолжили работу над следующей версией в своей основной исходной копии, но копия 1.0 осталась такой же, какой она была на момент выпуска. И вы можете продолжить исправление ошибок там. Теги - это просто имена, прикрепленные к конкретным ревизиям для простоты использования. Можно сказать «Редакция 2342 исходного кода», но проще называть его «Первая стабильная ревизия». :)
  • Я обычно помещаю все в систему контроля версий, которая имеет непосредственное отношение к программированию. Например, поскольку я делаю веб-страницы, я также помещаю изображения и CSS-файлы в систему управления исходным кодом, не говоря уже о файлах конфигурации и т. Д. Документация по проекту там не рассматривается, однако на самом деле это просто вопрос предпочтений.
Vilx-
источник
3

Другие заявили, что это зависит от вашего стиля.

Большой вопрос для вас заключается в том, как часто вы «интегрируете» свое программное обеспечение. Разработка на основе тестирования, Agile и Scrum (и многие, многие другие) полагаются на небольшие изменения и непрерывную интеграцию. Они проповедуют, что сделаны небольшие изменения, каждый находит их и постоянно исправляет.

Однако в более крупном проекте (например, правительство, оборона, 100 тыс. + LOC) вы просто не можете использовать непрерывную интеграцию, поскольку это невозможно. В этих ситуациях может быть лучше использовать ветвление для выполнения множества небольших коммитов, но возвращать в транк ТОЛЬКО то, что будет работать и готово для интеграции в сборку.

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

На этот вопрос нет однозначного ответа, лучше всего работать с вашей командой, чтобы найти лучшее компромиссное решение.

кладовая для продуктов
источник
2

Контроль версий с Subversion - это руководство как для начинающих, так и для пожилых людей.

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

тонкий
источник
1

Для совершения я использую следующие стратегии:

  • совершать как можно чаще.

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

  • не нарушайте сборку при любом коммите - должна быть возможность получить любую версию хранилища и собрать ее.

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

Lennaert
источник
Ваши правила 1 и 3 несколько противоречивы. Однако, если основная разработка сделана для функциональных ветвей, правило № 3 может быть «не ломать ствол» для небольших изменений, когда ветки будут излишними.
Крис Чарабарук
1

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

например, svn commit . -m 'bug #201 fixed y2k bug in code'расскажет всем, кто смотрит на историю, для чего эта ревизия.

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

Джереми Френч
источник
1

Политика в нашей работе выглядит следующим образом (многопрофильная команда разработчиков работает над объектно-ориентированной средой):

  • Обновление от SVN каждый день, чтобы получить изменения предыдущего дня

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

  • Не передавайте код, который что-либо нарушает, так как это повлияет на других разработчиков.

  • Работайте над небольшими порциями и совершайте ежедневно СЛЕДУЮЩИЕ КОММЕНТАРИИ!

  • Как команда: сохраняйте ветку разработки, затем перемещайте предварительный код (для QA) в производственную ветку. В этой ветке должен быть только полностью рабочий код.

LilGames
источник
0

Я думаю, что есть два способа передачи частоты:

  1. Фиксация очень часто для каждого реализованного метода, небольшой части кода и т. Д.
  2. Фиксация только завершенных частей кода, таких как модули и т. Д.

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

abatishchev
источник