Есть ли способ автоматически обновлять версию привязки внешнего SVN при фиксации собственных изменений?

Я использую TortoiseSVN (версия 1.9.7) и только начал использовать svn:externals. Я хочу использовать его для совместного использования некоторых общих функций в разных проектах в одном репозитории. Таким образом, макет репо будет выглядеть примерно так:

/projectA
/projectB
/projectC
/sharedLibs
/sharedLibs/lib1
/sharedLibs/lib2

Затем я использую svn:externals, например. на /projectA/lib, чтобы связать некоторую общую библиотеку с текущим проектом. Например ^/sharedLib/lib1.

Как рекомендовано в документации, я использую явные номера версий (ревизия привязки). Теперь я могу изменить некоторый код в моей рабочей копии /projectA/lib/lib1, и TortoiseSVN предлагает мне зафиксировать это в /sharedLibs/lib1, чтобы сделать мои изменения доступными для всех проектов.

Однако, если я хочу затем обновить внешний вид /projectA/lib, чтобы он указывал на изменение, которое я только что сделал сам, мне нужно сделать еще один коммит только для изменения свойства svn:external /projectA/lib (с параметром «adjust to HEAD ”, предлагаемый диалоговым окном внешнего редактирования TortoiseSVN).

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


person Cornelius Sicker    schedule 12.04.2019    source источник


Ответы (1)


Поиграв некоторое время с svn:externals вместе с TortoiseSVN, мой вопрос теперь кажется мне немного глупым... Я изложу здесь свое текущее понимание, поскольку всегда есть (небольшой) шанс, что это может кому-то помочь.

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

Используя пример из вопроса, происходит следующее:

  1. Локальные изменения в /projectA/lib/lib1 будут зафиксированы в /sharedLibs/lib1.
  2. Папке /projectA/lib нужно указать получить новую версию /sharedLibs/lib1, которая была создана на шаге 1. Это делается путем обновления свойства svn:externals папки.

Так что изменения на самом деле происходят в двух совершенно разных местах, поэтому имеет смысл использовать два коммита. Другая причина заключается в том, что мы хотим указать /projectA/lib/lib1 на конкретную версию (привязка версии) /sharedLibs/lib1. Мы не можем знать этот новый номер версии до того, как изменения будут зафиксированы (на шаге 1 выше). Мы могли бы попытаться угадать номер ревизии, который получает новый коммит, но это может потерпеть неудачу, если кто-то еще совершит что-нибудь между нашими действиями update и commit.

person Cornelius Sicker    schedule 12.12.2019