Внешние SVN - есть ли что-то между плавающими и закрепленными внешними?

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

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

а) Если я кассирую голову, я получаю голову внешнего

б) Если я извлекаю ревизию X, я получаю ревизию X внешнего

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

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

Спасибо, Акаш.


person Akash    schedule 03.09.2010    source источник


Ответы (2)


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

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

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

Как вы можете обеспечить синхронизацию основных ревизий репозиториев с ревизиями внешних репозиториев? Что должно произойти, когда ваш репозиторий имеет ревизию 1000, а внешний репозиторий имеет только ревизию 300?

Чтобы на самом деле попытаться ответить на ваш вопрос: я понятия не имею, планируется ли что-то подобное для будущих версий SVN, но я бы поспорил, что нет. Что касается «хитрости», вы, возможно, могли бы добиться этого, создав какой-то сценарий-оболочку, который мог бы изменить внешние свойства, чтобы закрепить их в ревизии, которую вы планируете проверить, ДО того, как вы действительно проверите. Не то, что я бы посчитал практичным или совсем тривиальным.

person Yoopergeek    schedule 03.09.2010
comment
Спасибо, я должен был указать, что я извлекаю внешние файлы из того же репозитория. Я полностью согласен с тем, что мой вариант использования бессмысленен в противном случае. Считаете ли вы, что в данном частном случае это все-таки неправильное использование экстерналов? Мне кажется, что это верный сценарий. - person Akash; 03.09.2010
comment
Я думаю, что ваше запланированное использование не является предполагаемым использованием внешних устройств. Приравнивается ли это к «неправильному», решать вам. Лично я бы уклонился от этого. Это становится костылем/особым случаем в вашем репозитории. Если в будущем по какой-либо причине вам понадобится или вы захотите разбить внешние файлы на разные репозитории, вам придется изменить/прекратить использовать свою специализированную схему внешнего закрепления... Вместо того, чтобы менять методологию сейчас (небольшая «боль»), вы потенциально причините гораздо большее горе/боль в будущем. - person Yoopergeek; 10.09.2010

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

person khmarbaise    schedule 03.09.2010
comment
Извините, я поправил форматирование своего вопроса, чтобы было понятнее, что я ищу. Мне не нужен ни обычный плавающий внешний, ни закрепленный. Я хочу получить версию X внешней версии, когда я проверяю версию X своего кода, и получаю версию Y внешней версии, когда я проверяю версию Y своего кода. - person Akash; 03.09.2010