У минулому я використовував сховища Subversion, щоб зберігати свої вихідні документи, і дотримувався конвенції про "незначну проект" щодо організації сховищ, яка, як я вважаю, працює дуже добре як для великих, так і для малих організацій.
Ми б структурували наші відділення сховища; теги та ствол:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
В межах самого власного дерева-джерела ми використали б (щось на зразок) таку структуру:
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct-+
| +-build
| +-doc
| +-test
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
Ідея полягала в (і досі є) використати структуру сховища, щоб сприяти структуруванню зв'язку між інженерною командою; частина бізнесу, що стоїть перед клієнтами, та різні інші зацікавлені сторони та експерти в галузі.
На доцільність: вихідні документи, які розміщуються в одному з каталогів "проекту", використовуються (і заробляють гроші) лише один раз. Документи, що знаходяться в одному з каталогів "productLines", заробляють гроші стільки ж разів, скільки продається продукт з цього конкретного рядка. Документи, що знаходяться в одному з каталогів "бібліотек", заробляють гроші стільки разів, скільки продаються будь-які продукти, які ними користуються.
Це робить поняття амортизації витрат явним і допомагає розбудувати підтримку повторного використання вихідних документів у бізнесі.
В ідеальному світі клієнт, що стикається з частиною бізнесу, також використовував би цю структуру для зберігання презентацій та інших гарантій продажів, тому розробники можуть бачити, які очікування клієнтів були створені прямо поруч із відповідним каталогом продуктів, а клієнти, що стикаються з колегами, можуть відстежувати розвиток прогрес щодо функцій та продуктів, які вони продають.
Це також означає, що існує загальна структура, над якою можуть працювати наші засоби автоматизації побудови. (Наші сценарії побудови проходять у вихідному дереві, шукаючи папки «збирання», в яких вони знаходять файли конфігурації, вказуючи, яким чином повинен бути побудований кожен компонент; подібний процес відбувається і при створенні та тестуванні документації). Знову ж таки, в ідеальному світі веб-сайт організації та інші маркетингові застави можуть бути побудовані так само.
Як одна фінальна примітка; система безперервної інтеграції знає, що їй потрібно викликати збірку; статичний аналіз; тест на дим і тестовий запуск блоку кожного разу, коли змінюється ствол, кожен раз, коли будь-яка гілка "тегів" змінюється, і кожен раз, коли будь-яка гілка "АВТОМАТИЧНА" гілка. Таким чином, окремі розробники можуть використовувати систему CI зі своїми персональними відділеннями, важливою здатністю, IMHO.