Делать внешние определения SVN надежными? - PullRequest
3 голосов
/ 04 ноября 2008

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

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

Более элегантным представляется использование внешних определений Subversion . Однако представляется необходимым использовать явные номера ревизий, чтобы на 100% убедиться, что назначена правильная ревизия (например, если ствол, или тег, или ветвь были указаны без номера ревизии, кажется, что вы не можете быть на 100%). убедитесь, что вы получите точно такую ​​же ревизию, как, например, год назад, так как люди всегда могут зафиксировать поверх ствола / ветви / тега.

Сейчас эта библиотека находится в постоянном развитии, так как она в основном является сердцем нашего мультиплатформенного приложения. Таким образом, поддержание версий в svn: external prop требует постоянного обновления. Также часто разработчики вносят изменения в свою локальную копию (исправления ошибок, новые функции) и затем фиксируют ее. Теперь я боюсь, что если я настрою его с использованием ревизий, будет сложнее отследить, куда именно идет этот коммит (например, разработчики могут потерять отслеживание того, что депо находится на ветке; также при фиксации оно будет зафиксировано на вершине ствола / ветви, возможно пропуская другие коммиты другими разработчиками).

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

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

Ответы [ 4 ]

3 голосов
/ 04 ноября 2008

Проблема вашей проблемы в том, что ваша библиотека не является библиотекой, по крайней мере, не в строгом смысле этого выражения.

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

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

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

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

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

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

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

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

1 голос
/ 04 ноября 2008

Использование svn: externals нормально ( с ревизиями ), но звучит так, как будто вам нужно использовать сервер сборки (например, Hudson ), который автоматически собирается при проверке вещей in. Это будет определять непосредственно, когда разработчики вносят локальные изменения, и забывать обновлять внешние.

1 голос
/ 04 ноября 2008

Что может помочь, так это ограничить доступ на запись / принятие к папке тегов и использовать теги в svn: externals вместо номеров ревизий. (то есть с svnperms )

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

0 голосов
/ 04 ноября 2008

Вы можете использовать Vendor Branches .

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