Найкращі практики SVN - робота в команді


98

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

Я бачу вигоду від додавання розумно багатослівних повідомлень під час введення коду, але чи варто пам’ятати інші речі?

Дякую за всі чудові відповіді - вони дуже допомогли.

Відповіді:


76

Заохочуйте часті поступки. Співробітникам команди, які не користуються контролем версій, може здатися, що їм потрібно зберігати код із сховища, поки "він не працює правильно". Навчіть усіх брати на себе зобов’язання рано та часто знаходити проблеми якнайшвидше. Замість того, щоб утримувати код ", поки він не працює, запропонуйте вашим товаришам по команді створити гілки для функції, яка може зламати ствол. Це призводить до ...

Встановити практику розгалуження та маркування. Окрім гілок для функцій, заохочуйте своїх товаришів по команді використовувати гілки для виправлення великих помилок. Позначте виправлення основних помилок на початку та в кінці роботи. Підтримуйте теги (і, можливо, гілки) для виробництва / випусків qa.

Встановіть політику щодо ствола та дотримуйтесь його. Один із прикладів може бути: "Магістраль завжди повинна будуватися без помилок". або "ствол повинен завжди проходити всі одиничні тести". Будь-яка робота, яка ще не може відповідати стандартам багажника, повинна виконуватися у відділенні.


1
розгалуження та злиття - це біль у SVN. Інші VCS впораються з цим набагато краще, але я ніколи б не виступав за важкий процес для SVN.
Бран

7
@Branan WRONG це тому, що ви не знаєте, як правильно керувати джерелом. Коли ви розгалужуєтесь, від вас очікується, що як хороший розробник буде виконувати свою роботу і ОНОВЛЮВАТИ свою гілку зі стовбура та зливати останні зміни зі стовбура у свою філію щодня або кілька разів на день (на ваш вибір), щоб, врешті-решт, ви цього не зробили злити пекло, що нагромадилося. У мене на комп’ютері постійно працює локальна мережа, як мінімум 4-5 гілок, і це ніколи не говорять про це кошмари, тому що я це роблю правильно ... оновлюючи це часто, щоб я змінив, які люди перевіряють на багажник і працює і додає код по відношенню до
PositiveGuy

66

Не здійснюйте зміни форматування зі змінами коду

Якщо ви хочете реструктурувати пробіл гігантського файлу ( Control+ K+ D), добре. Зробіть зміни форматування окремо від фактичних логічних змін. Те саме стосується, якщо ви хочете переміщувати функції у файлах. Зробіть переміщення окремо від фактичного редагування.


2
тож я редагую файл цілий день, і тепер прийшов час його зробити, як я відокремлюю форматування?
Дастін Гец

23
Якщо ви збираєтеся робити зміни форматування з наявним кодом, спочатку зробіть це, зробіть, а потім додайте новий код / ​​відредагуйте його. Або додайте / редагуйте спочатку, введіть, а потім змініть форматування. Таким чином, розріз на додавання / редагування насправді має сенс і не говорить просто "зараз все інакше!"
.

1
+1. Сторонні зміни збільшують зусилля, необхідні для перегляду відповідних змін. Також ускладнює злиття / зміни портів (скажімо, інша гілка).
Атес Гораль

2
Хоча це є хорошою практикою, яку слід дотримуватися, я не думаю, що хтось зможе це застосувати. Джейсон має рацію, що хороший розробник зрозуміє, що може ігнорувати пробіли з хорошим інструментом "diff" (один вбудований у черепаху SVN) для фільтрації шуму.
Кен Сікора

1
Це можна забезпечити за допомогою перегляду коду та освіти для членів команди. Я не думаю, що рецензент повинен нести тягар, щоб відокремити логічні зміни від змін коду. Це має бути відповідальність виконавця.
Маркес

43

Одне з ключових понять, до якого я завжди дотримуюся, - це разом здійснювати зміни коду . Слідство не вносити незв'язаних змін коду в один і той самий коміт . Це означає, що не виправляйте 2 помилки за один комітет (якщо це не те саме виправлення), а також не фіксуйте половину помилок у кожному з 2 комітів. Крім того, якщо мені потрібно додати якесь нове вдосконалення або щось у незв'язану частину системи, яка мені потім потрібна для якоїсь іншої роботи, я здійснюю удосконалення окремо (і спочатку). Ідея полягає в тому, що будь-яка зміна, яку хтось, можливо, захоче самостійно (або відкотити самостійно), має бути окремим зобов'язанням. Це допоможе вам заощадити тонни головного болю, коли прийде час робити злиття або відколювати порушені функції.


4
+1 до цього. Здається, такий біль, коли ти вчиняєш. Але репо, наповнений атомними зобов'язаннями, є безцінним при перегляді старого коду.
Гордон Вілсон

2
Хіба це не те, для чого потрібна гілка функції ... виконайте стільки комісій, скільки потрібно, на гілці функції, тоді, коли ви готові об'єднати її в магістраль ... відкази означають лише видалення об'єднаного коміту. +1 для збереження відповідного коду разом ...
farinspace

16

Багато вже було сказано, і ось ще кілька:

  1. Якщо у вас є файли, які ви не бажаєте в керуванні джерелом (наприклад, конфігурація, компільовані файли тощо), додайте їх до списку ігнорування . Таким чином ви помічаєте будь-які файли, які ви забудете додати, завжди очікуючи порожнього списку файлів, що показують SVN як невідомі.

  2. Додайте подію для фіксації публікації, яка надішле електронний лист до вашого списку розсилки розробників (або конкретного для цієї цілі), що стосується здійсненої зміни, а в ідеалі - виправлення для неї.

  3. Інтегруйте свій інструмент відстеження помилок, щоб посилання на запити про помилки / функції відображалися із посиланнями на розріз. Це підтримують помилки, такі як MantisBT .

  4. Подумайте про інтеграцію з постійною інтеграцією (наприклад, CruiseControl.NET ), NAnt for Build та NUnit / VS для одиничних тестів. Таким чином, як тільки код реєстрації користувача або в запланований інтервал збирається код, запускаються одиничні тести, і розробник отримує зворотній зв’язок про процес. Це також попередить решту команди, якщо сховище буде порушено (тобто не буде створено).


Практика, яку ми використовуємо, полягає в тому, що всі файли конфігурації змінили розширення типу config.php.config або щось подібне. Таким чином ми зберігаємо наші конфігураційні файли на сервері, але кожен член команди має своє. Коли в конфігураційному файлі щось велике, ніж ми робимо копіювати форму svn версії ...
zidane

15

Ну, ази:

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

7
Я роблю навпаки своїми гілками та тегами. Гілки призначені для вилок від стовбура, які з часом зливаються зі стовбуром. Теги призначені для заморожування коду.
steve_c

1
Гілки - це копії, які можуть змінюватися. Теги - це копії, які НЕ слід змінювати. svnbook.red-bean.com/en/1.2/svn.branchmerge.tags.html
matpie

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

Svn дозволяє також проводити кілька замовлень однієї папки для одного користувача. Тож якщо ви виявите, що вам потрібно внести зміни, не пов’язані з вашою поточною роботою (тобто, якийсь клієнт, який закликає виправити аварійну допомогу, або випадково виявити непов’язану помилку), замовте ще раз і виправте її окремо.
PMF

"Теги" повинні використовуватися для заморожування коду. Якщо ви спробуєте змінити гілку "тегів", ваш клієнт SVN навіть попереджає вас.
Даніель

12

Відповіді, які люди дають, чудові. Значна частина цього узагальнена у користувальницькому документі svn для кращих практик для SVN .
Повторювати:

  1. Налаштуйте структуру вашого сховища (у вас повинен бути корінь проекту із стовбуром, гілками та тегами під ним)
  2. Виберіть політику щодо розгалуження політики (приватні гілки, гілки за віхою / випуском / помилкою тощо) та дотримуйтесь її - я б рекомендував більше розгалуження, а не менше, але приватних гілок не потрібно.
  3. Виберіть свою політику для повторного тегування - чим більше тегів, тим краще, але головне визначитися з умовами іменування тегів
  4. Виберіть свою політику щодо повторного зобов’язання для магістралі - зберігайте багажник максимально «чистим», він повинен бути спроможним випустити будь-коли

Це досить стара найкраща практика, тому я не думаю, що CollabNet вже не рекомендує їх. Чи доступні нові найкращі практики? Той, про кого ви згадали, повертається до SVN 1.0
mliebelt

1
@mliebelt - я оновив посилання на версію apache. Незалежно від віку ідеї вибору вашої репо-структури, політики розгалуження, політики розмітки та вашої політики здійснення комісій, а також дійсно гарні відповіді, як і раніше, все ще звучать.
hromanko

Цей опис системи "Відгалуження, коли потрібна" - це досить гарно. Звучить як рецепт офісної зйомки.
naught101

10

Я хотів би узагальнити кращі практики, яких я дотримуюся:

  1. Не здійснюйте бінарних файлів . Має бути окреме сховище для бінарних файлів, таких як Nexus , Ivy або Artifactory .
  2. Має бути структура сховища . Особисто я використовую таку структуру репозиторію:

    /trunk
    /tags
        /builds
            /PA
            /A
            /B
        /releases
            /AR
            /BR
            /RC
            /ST
    /branches
        /experimental
        /maintenance
            /versions
            /platforms
        /releases
    
  3. Використовуйте конкретний список типів філій . Мій список такий: експериментальний , технічне обслуговування , версії , платформи , випуски .
  4. Використовуйте конкретні типи тегів : PA(пре-альфа), A(альфа), B(бета), AR(альфа-реліз), BR(бета-реліз), RC(кандидат на реліз), ST(стабільний).
  5. Мінімізуйте необхідність об'єднання . Повинні бути правила, коли злиття можливо / заохочується і коли його немає.
  6. Версія нумерації . Слід встановити підхід до нумерації версій, якого слід дотримуватися. Зазвичай він описується в такому документі як План управління конфігурацією програмного забезпечення, він є частиною проектної документації високого рівня. Особисто я використовую складний підхід до нумерації версій. Відповідно до такого підходу, версії мають такі шаблони: Nxx (гілки обслуговування / підтримка), NMx (гілка випуску), NxK (збірка), NMK (випуск).
  7. Здійснюйте як можна частіше . Якщо це, як правило, важко (наприклад, коли слід внести занадто багато змін для реалізації функції та навіть компіляції коду), слід використовувати експериментальні гілки.
  8. Багажник повинен містити новітні розробки . Наприклад, коли є вибір, де розробити нову основну версію ( Nxx ) програми, в магістралі або у відділенні, рішення завжди слід приймати на користь магістралі . Стара версія повинна бути розгалужена на відділення технічного обслуговування / підтримки . Він передбачає, що чітке розмежування основних версій та їх специфіка (архітектура, сумісність) виникає якомога раніше .
  9. Сувора політика "не порушуйте збірку" щодо галузей випуску . Тим часом це не обов'язково має бути суворим для магістралі , доки воно може мати або експериментальну розробку, або кодову базу, яка потребує вирішення проблем з об'єднанням.
  10. Використовуйте svn: зовнішні . Це дозволить модулювати ваш проект, встановити прозору процедуру управління випуском, розділити та завоювати різні функції.
  11. Скористайтеся відстеженням проблем . Ви зможете вказати посилання на проблему всередині повідомлення про фіксацію.
  12. Вимкнути порожні повідомлення про фіксацію . Це можна зробити за допомогою гачків, які попередньо здійснюють.
  13. Визначте, які гілки потрібно постійно інтегрувати . Наприклад, я вважаю за краще використовувати безперервну інтеграцію для гілок магістралі , обслуговування та випуску .
  14. Встановлення політики безперервної інтеграції для різних типів галузей. Як я вже зазначав, найсуворіші правила "не порушуйте збірку" застосовуються до випуску гілок, тоді як гілки магістралі та обслуговування можуть бути порушені іноді. Також є різниця між переліком перевірок, що проводяться на магістралі / технічному обслуговуванні та випуску гілок.

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


Отже, хо ти працюєш у команді? Чи використовують різні люди різні гілки? Як уникнути конфліктів? Ви відповідаєте, не стосується роботи в команді :(
DataGreed

2
З: Як уникнути конфліктів? A: Мінімізуйте необхідність об'єднання , Trunk повинен містити новітні розробки , Здійснюйте як можна частіше Питання: Чи різні люди використовують різні гілки? Відповідь: Кожну гілку можуть використовувати одні або кілька людей. Також важливо розрізняти типи галузей: експериментальне, технічне обслуговування та випуск, це допомагає уникнути конфліктів. Питання: Ви не відповідаєте на роботу в команді A: Це може здатися з першого погляду. Використання контролю версій автоматично означає роботу в команді. Я описав набір правил (як правила дорожнього руху), які допомагають співпрацювати ще ефективніше
altern

7

Одне, що я вважаю дуже корисним, це svn: external властивість, що означає, що ви можете посилати каталоги з інших сховищ у свої власні. Це дає дійсно приємні способи організації вашого коду та даних. Деякі приклади:

  1. Якщо у вас є окремі сховища для коду різних модулів / бібліотек та посилання на ті, які ви використовуєте. Це означає, що ви можете мати мета-сховище для кожного виконуваного файлу. Якщо це невеликий виконуваний файл, який використовує лише кілька модулів, вам не потрібно буде перевіряти все дерево. Ефект цього полягає в тому, що ви отримуєте номери редагування SVN на модуль.
  2. Додавання великих схожих даних, таких як складені версії бібліотек, до сховища кодів, як правило, вважається шкідливою звичкою, але це може бути дуже зручно. Якщо ви просто додасте всі версії всіх використовуваних бібліотек до іншого сховища, ви зможете отримати найкраще з двох світів. Ви посилаєтесь на версії бібліотек, які використовуєте, у своєму сховищі коду. Перевіряючи сховище коду, ви отримуєте і код, і двійкові файли. Однак бінарні файли зберігаються у великому сховищі, яке не потрібно робити так само жорстко, як ваш вихідний код, а сховище вихідного коду залишається невеликим і містить лише текст.

1
Мені подобається точка 2. Оскільки ви можете вказати номер редакції чи ні під час використання svn: external, це дозволить вам "прив’язати" деякі бібліотеки до певних версій, а інші дозволить "відстежувати" останню версію.
j_random_hacker

Використання "svn: external" s - одна з найпотужніших, і я б сказав найбільш основні особливості SVN. Це обов’язково.
Данієль

5

Використовуйте інтеграцію зі своїм програмним забезпеченням для відстеження помилок. Якщо ви використовуєте Bugzilla , ви можете налаштувати його, якщо ваш коментар починається з "Bug XXXX", ваш коментар SVN автоматично додається як коментар до даної помилки, включаючи посилання на ваш веб-інтерфейс SVN до цієї версії.


Trac має гарну інтеграцію svn для відстеження помилок, а також часової шкали, фіксації різниць, вікі тощо
Doug Currie

Джира також відстежує зобов’язання, пов’язані з проблемами
Ден

4

Дізнайтеся про інструменти та конвенції для розгалуження та об'єднання SVN.

Найкращий спосіб співпраці з іншими членами команди - це розбити роботу на цілісні характеристики / виправлення, а потім працювати над окремими змінами, кожен у галузі. Потім об'єднайте зміни назад до магістралі / магістралі, коли завершено / готово / затверджено для об'єднання.

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

Ваш пробіг може відрізнятися, і це може бути надмірним для лише двох людей.


3

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

Я рекомендую Tortoise SVN (якщо ви використовуєте Windows) та Visual SVN (якщо ви використовуєте VS).

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


3

Крім розгалуженої політики та ін. (де один розмір точно не підходить усім), ви повинні мати добрі результати:

  • Зобов’язання повинно стосуватися однієї роботи, якщо це можливо; виправлення помилок, нова функція - має бути певна «логіка» щодо змін, які ви здійснили
  • Комітет повинен мати описовий коментар, який допоможе вам знайти його під час перегляду історії сховища. Більшість людей пропонують написати одне речення на початку, яке описує цілий документ і більш детальний виклад нижче
  • Якщо можливо, слід прив’язати комісію до системи відстеження помилок, якщо це можливо. Trac, Redmine та ін. дозволяють вам створювати посилання від помилок до комітетів і навпаки, що дуже зручно.


2

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


2

Я бачив одне, що зменшує кількість порушених комісій - це наявність хороших сценаріїв попереднього фіксації. Наприклад, ви можете запустити будь-які одиничні тести до зміни. Це призведе до того, що зобов’язання будуть трохи повільними, але ви економите час, уникаючи наступати на чиїсь пальці ніг і не потрібно вибачатися. Звичайно, це стає набагато важче керувати, коли у вас є велика команда розробників і дуже часті домовленості.


+1 для сценаріїв попереднього фіксації. Чудова ідея. Цікаво, чи є спосіб отримати git, щоб дати вам присмак над рукою, якщо ви спробуєте скористатися, не запускаючи його?
naught101

2

Одним із прикладів інтеграції з помилковим прослідковувачем та примусовим застосуванням політики може бути скрипт Trac 'svn до / після фіксації гачка, який може відмовитись від здійснення, якщо повідомлення комісії не посилається на будь-який квиток у баг-трекері та додає коментарі до існуючих квитки на основі вмісту повідомлення (тобто повідомлення про фіксацію може містити щось на зразок "Виправлення №1, №2 та №8", де №1, №2, №8 - номери квитків).


2

Найкраща практика використання SVN :

  1. Коли ви вперше прийшли в офіс і відкрили проект Eclipse , перший крок повинен зробити - оновити проект.

  2. Після оновлення приступайте до роботи. Закінчивши кодування, перевірте його, чи правильно працює програма без будь-яких винятків. Після того, як ви впевнені, що ваш код працює нормально, настав час зробити його.

Примітка. Під час здійснення коду не здійснюйте безпосередньо. Зробіть синхронізацію з сервером і перевірте, що потрібно зробити. Примітка. Не вкладайте всю папку один раз. Тому що ви, можливо, внесли деякі зміни до файлу для вашої вимоги або ви можете видалити деякі файли у вашій локальній системі. Але налаштування на сервері різні. Тому перевіряйте файли окремо і виконайте код.

  1. Не здійснюйте / оновлюйте конфліктні файли безпосередньо

  2. Коли робити заміщення та оновлення?

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

    Примітка. Не тримайте проект без оновлення більше доби. Також не зберігайте код, не виконуючи зобов'язання протягом багатьох днів.

  3. Спілкуйтеся з тим, хто працює в одному складі, і обговоріть, які зміни вони вносять щодня.

  4. Не встановлюйте властивості та файл конфігурації, якщо немає певних причин. Тому що налаштування будуть різними на сервері та в хмарі.

  5. Не фіксуйте цільові папки у SVN, лише сховища вихідного коду та папки ресурсів повинні підтримуватися у сховищі SVN.

  6. Коли ви втратили код, не панікуйте! Ви можете отримати попередню копію з історії SVN.

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



1

SVN сам по собі є гарним початком, а деякі інші афіші запропонували чудові пропозиції щодо найкращих практик.

Єдине, що я хочу додати, це те, що вам слід підключити SVN за допомогою CruiseControl або TeamCity, щоб керувати процесом безперервної інтеграції. Це надсилатиме електронні електронні листи та повідомляє всіх, коли хтось порушив збірку.

Буде дуже рано говорити про те, хто слідкує за вашим процесом, а хто ні. Це може призвести до тертя, але в майбутньому ваша команда буде краще.


1
погодився, CruiseControl не раз врятував мою команду.
Гордон Вілсон

1
  • Точний коментар для кожного вчинку

  • Не порушуйте (основну) збірку!

  • Введіть, як тільки логічна одиниця зміниться

  • Уникайте використання Subversion як резервного інструменту

  • Трохи розгалуження / злиття, наскільки це можливо

.

Більш детальну інформацію можна знайти в кращих практиках SVN .


0

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

  1. Часті зобов’язання у вашу філію
  2. Дискретні / модульні зобов’язання у вашу філію ( див. Тут )
  3. Оновлення / злиття з магістралі часто. Не сидіть на своїй гілці, не переосмислюючись

Громадський багажник

  1. Слід завжди будувати / працювати
  2. Один випуск на комісію ( знову дивіться тут ) Здебільшого, щоб ви та інші могли одночасно виправляти речі
  3. Не пов'язуйте зміни рефакторингу / пробілів з логічними змінами. У ваших товаришів по команді буде важко витягувати те, що ви насправді робили з зобов'язань

Пам’ятайте, що чим більше поступових, модульних, дискретних та лаконічних ви зробите свої зобов’язання, тим простіше вам (або, можливо, іншим):

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

0

Використовуйте це для шаблону коментарів:

[завдання / історія ххх] [другорядний / основний] [коментар] [подальший коментар] [URL для помилки]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.